是否可以在perl中比较这样的表达式的值?
if(0x100 < $my_var < 0x200) {
return $my_var;
}
上述方法会产生语法错误。
在perl中,有没有更好的方法来检查该值是否存在于特定范围内?
我不想使用两个if条件来执行此操作。我相信,为此,任何语言都会有更好的方式。
对不起,如果这是一个非常基本的问题。我正在尝试用perl编写我的第一个程序。
修改
if($my_var >0x100 && $my_var < 0x200)
我不喜欢上述方法。如果有任何其他复杂的方法,请告诉我。我会在64位地址上使用它很多。因此,这样写,会使代码看起来很难看。请提出其他方法。
答案 0 :(得分:3)
我更喜欢这个因为如果if:
中有两个条件,它不会花费太多精力if($my_var >0x100 && $my_var < 0x200)
if($x ~~ 0X100..0X200)
也可以但在perl6中不在perl5
如果您不使用perl6,请忘记上述方法。
答案 1 :(得分:3)
您可以编写自己的函数,
sub between {
my ($x,$y,$z) = @_;
return ($x < $y and $y < $z);
}
if (between(0x100, $my_var, 0x200)) { print "OK"; }
答案 2 :(得分:2)
你需要将条件分解为两个单独的测试以及一个和语句, 像这样,
# This example should print "Pass"
my $my_var = 0x150;
if (0x100 < $my_var && $my_var < 0x200) {
print "Pass\n";
} else {
print "Fail\n";
}
这是处理范围的最常用方法。对于可能仍然有用的一些不同的东西,你可以使用smart match operator(又名。inchworm operator) 1 和range operator这可能实际证明更多在处理内存空间时可读,
# This example should show that 0x150 and 0x190 pass
my @addresses = (0x090, 0x150, 0x190, 0x210);
for my $address (@addresses) {
if ($address ~~ [0x100 .. 0x200]) {
print "$address - Pass\n";
} else {
print "$address - Fail\n";
}
}
答案 3 :(得分:0)
我只是将上下值分配给变量$high
$low
并执行:
if($val > $low && $val < $high)