簡體   English   中英

Perl Flip Flop運算符和行號

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM