Joh*_*n C 2 perl operators flip-flop
我在看另一个问题时注意到了这一点......
如果我有这样的脚本:
while (<>) {
print if 5 .. undef;
}
Run Code Online (Sandbox Code Playgroud)
它会跳过第1..4行,然后打印文件的其余部分.但是如果我试试这个:
my $start_line = 5;
while (<>) {
print if $start_line .. undef;
}
Run Code Online (Sandbox Code Playgroud)
它从第1行打印.任何人都可以解释原因吗?
实际上我甚至不确定为什么第一个有效.
嗯,进一步研究这个我发现这有效:
my $start = 5;
while (<>) {
print if $. == $start .. undef;
}
Run Code Online (Sandbox Code Playgroud)
所以第一个版本神奇地使用了$.哪个是行号.但我不知道为什么它失败了变量.
在触发器中使用裸号被视为对行计数变量的测试$..来自perldoc perlop:
如果标量的任一操作数
".."是常量表达式,则如果该操作数==与当前输入行号($.变量)相等(),则该操作数被视为true .
所以
print if 5 .. undef;
Run Code Online (Sandbox Code Playgroud)
是"速记":
print if $. == 5 .. undef;
Run Code Online (Sandbox Code Playgroud)
对于标量变量,情况并非如此,因为它不是常量表达式.这就是它没有经过测试的原因$..