-1

是否可以在 perl 中比较这样的表达式的值?

if(0x100 < $my_var < 0x200) {
    return $my_var;
}

上述方式给出了语法错误。

在 perl 中,是否有更好的方法来检查该值是否存在于特定范围内?

我不想使用两个 if 条件来执行此操作。我敢肯定,为此,任何语言都会有更好的方法。

对不起,如果这是一个非常基本的问题。我正在尝试用 perl 编写我的第一个程序。

编辑

if($my_var >0x100  && $my_var < 0x200) 

我不喜欢上面的方法。请让我知道是否有任何其他复杂的方法。我会在 64 位地址上大量使用它。因此,这样写会使代码看起来很丑。请建议其他方式。

4

4 回答 4

3

我更喜欢这本身,因为如果 if 中有两个条件,则不需要太多努力:

if($my_var >0x100  && $my_var < 0x200)

if($x ~~ 0X100..0X200)也可以,但在 perl6 中不在 perl5 中

如果您不使用 perl6,那么请忘记上述方法。

于 2013-11-11T13:02:30.270 回答
3

您可以编写自己的函数,

sub between {
  my ($x,$y,$z) = @_;

  return ($x < $y and $y < $z);
}

if (between(0x100, $my_var, 0x200)) { print "OK"; }
于 2013-11-11T13:12:36.173 回答
2

您需要将条件分解为两个单独的测试以及一个 and 语句,如下所示,

# This example should print "Pass"
my $my_var = 0x150;
if (0x100 < $my_var && $my_var < 0x200) {
  print "Pass\n";
} else {
  print "Fail\n";
}

这是处理范围的最常见方法。对于可能仍然有用的一些不同的东西,您可以使用智能匹配运算符(又名尺蠖运算符1以及范围运算符,这在处理内存空间时实际上可能被证明更具可读性,

# 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";
  }
}

  1. 请注意,智能匹配是实验性的/已弃用,具体取决于您使用的 Perl 版本。match::smart提供了相同的功能。
于 2013-11-11T13:03:27.283 回答
0

我只需将上限和下限分配给变量$high $low并执行以下操作:

if($val > $low && $val < $high)
于 2013-11-11T13:02:51.647 回答