Perl 如果基于条件的查找不起作用
我想查找一个范围,并返回组id,尽管一个简单的基于if的查找可以工作。但是,它不起作用,我不知道为什么。 有人能帮忙吗Perl 如果基于条件的查找不起作用,perl,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
#!/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";
}
在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...
如果($\u[0]<1){您没有涵盖此案例}
elsif($\[0]le
和ge
用于字符串比较。将它们替换为=
或者,您可以这样编写函数
sub get_xid {
my ($v) = @_;
return $v < 1 || $v > 32 ? "" : 'x.'.int(($v+3)/4);
}
sub get_xid {
my ($v) = @_;
return $v < 1 || $v > 32 ? "" : 'x.'.int(($v+3)/4);
}
i: 1, x_id: x.1
i: 2, x_id: x.1
i: 3, x_id: x.1
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: x.3
i: 10, x_id: x.3
i: 11, x_id: x.3
i: 12, x_id: x.3
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
i: 26, x_id: x.7
i: 27, x_id: x.7
i: 28, x_id: x.7
i: 29, x_id: x.8
i: 30, x_id: x.8
i: 31, x_id: x.8