Perl Flip Flop运算符和行号

时间:2014-06-08 11:22:42

标签: perl operators flip-flop

我在看another question ...

时注意到了这一点

如果我有这样的脚本:

while (<>) {
  print if 5 .. undef;
}

它跳过第1..4行,然后打印文件的其余部分。 但是如果我试试这个:

my $start_line = 5;
while (<>) {
  print if $start_line .. undef;
}

从第1行打印。 任何人都可以解释原因吗?

实际上,我甚至不确定为什么第一个有效。

嗯嗯进一步研究这个我发现这个有效:

my $start = 5;
while (<>) {
  print if $. ==  $start .. undef;
}

因此,第一个版本神奇地使用$.这是行号。但是我不知道为什么它会因变量而失败。

1 个答案:

答案 0 :(得分:9)

在触发器中使用裸号被视为对行计数变量$.的测试。来自perldoc perlop

  

如果标量".."的任一操作数是 常量表达式 ,那么   如果操作数与当前输入相等(==),则认为该操作数为真   行号($.变量)。

所以

print if 5 .. undef;

是“速记”:

print if $. == 5 .. undef;

对于标量变量同样如此,因为是常量表达式。这就是为什么它没有针对$.进行测试。