perl - 如何检查特定范围内的值?

时间:2013-11-11 12:59:31

标签: regex perl

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

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

上述方法会产生语法错误。

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

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

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

修改

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

我不喜欢上述方法。如果有任何其他复杂的方法,请告诉我。我会在64位地址上使用它很多。因此,这样写,会使代码看起来很难看。请提出其他方法。

4 个答案:

答案 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";
  }
}

  1. 请注意,智能匹配是实验/ depercated,具体取决于您使用的Perl版本。 match::smart提供相同的功能。

答案 3 :(得分:0)

我只是将上下值分配给变量$high $low并执行:

if($val > $low && $val < $high)