[英]Perl Flip Flop operator and line numbers
我在看另一個問題時注意到了這一點......
如果我有這樣的腳本:
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;
}
所以第一個版本神奇地使用了$.
這是行號。 但我不知道為什么它失敗了變量。
在觸發器中使用裸號被視為對行計數變量$.
。 來自perldoc perlop
:
如果標量
".."
任一操作數是常量表達式 ,則如果該操作數與當前輸入行號($.
變量)相等(==
),則該操作數被視為true。
所以
print if 5 .. undef;
是“速記”:
print if $. == 5 .. undef;
對於標量變量,情況並非如此,因為它不是常量表達式。 這就是它沒有針對$.
進行測試的原因$.
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.