perl - 如果基于条件的查找不起作用
问题描述
我想查找一个范围,并返回组 id,尽管一个简单的基于 if 的查找会起作用。但是,它不起作用,我不知道为什么。有人可以帮忙吗?
#!/usr/bin/perl
sub get_xid {
my $x_id = "";
if(($_[0] ge 1) && ($_[0] le 4)) { $x_id = "x.1"; }
if(($_[0] ge 5) && ($_[0] le 8)) { $x_id = "x.2"; }
if(($_[0] ge 9) && ($_[0] le 12)) { $x_id = "x.3"; }
if(($_[0] ge 13) && ($_[0] le 16)) { $x_id = "x.4"; }
if(($_[0] ge 17) && ($_[0] le 20)) { $x_id = "x.5"; }
if(($_[0] ge 21) && ($_[0] le 24)) { $x_id = "x.6"; }
if(($_[0] ge 25) && ($_[0] le 28)) { $x_id = "x.7"; }
if(($_[0] ge 29) && ($_[0] le 32)) { $x_id = "x.8"; }
return $x_id;
}
for($i=1;$i<=31;$i++) {
$x_id = &get_xid($i);
print " i: $i, x_id: $x_id\n";
}
结果:
i: 1, x_id: x.1
i: 2, x_id: x.5
i: 3, x_id: x.8
i: 4, x_id: x.1
i: 5, x_id: x.2
i: 6, x_id: x.2
i: 7, x_id: x.2
i: 8, x_id: x.2
i: 9, x_id:
i: 10, x_id: x.1
i: 11, x_id: x.1
i: 12, x_id: x.1
i: 13, x_id: x.4
i: 14, x_id: x.4
i: 15, x_id: x.4
i: 16, x_id: x.4
i: 17, x_id: x.5
i: 18, x_id: x.5
i: 19, x_id: x.5
i: 20, x_id: x.5
i: 21, x_id: x.6
i: 22, x_id: x.6
i: 23, x_id: x.6
i: 24, x_id: x.6
i: 25, x_id: x.7
解决方案
在 Perl 中,数字的比较运算符是<
, ==
, >
, <=
, >
。如果您使用字符串运算符(le
、ge
等),则将数字作为字符串进行比较。因此,例如,10
大于1
但小于4
。
另请注意,您正在进行冗余测试。考虑
if($_[0] < 1) { you didn't cover this case }
elsif($_[0] <= 4) { $x_id = "x.1"; }
elsif($_[0] <= 8) { $x_id = "x.2"; }
elsif($_[0] <= 12) { $x_id = "x.3"; }
etc...
推荐阅读
- html - 在新选项卡中显示 PDF
- ssl - 处理 local_name 中的多个域
- java - 在 android studio 中的活动之间传递数据
- php - 如何在 Laravel 中实现存储库模式
- javascript - 使用表格导航滚动不起作用
- javascript - 多个过滤器在显示一些折旧问题的 AWS 服务器中不起作用,但在 localhost 中运行良好。如何解决这个问题?
- c# - 如何使用 C# 从共享文件夹中获取权限?
- java - 如何在移动应用程序屏幕上显示数据?
- python - 如何仅提取时代细节并在熊猫数据框中保留其他内容?
- python - 如何在 Python websocket 中查看关闭连接的状态码?