[英]flip-flop-operator/readline-counter question
閱讀此Perl:從1到n提取行(在Windows中)我不了解flip-flopoperator / readline-counter部分。
perl -nE 'say $c if $c=1..3' my_file
1個
2
3E0
有人可以詳細解釋此輸出的來源嗎?
引用perlop :
在標量上下文中,“
..
”返回布爾值。 運算符是雙穩態的,就像觸發器一樣,它模擬sed , awk和各種編輯器的行范圍(逗號)運算符。 每個“..
”運算符都保持自己的布爾狀態,即使在包含該狀態的子例程的調用之間也是如此。 只要其左操作數為false,它就是false。 一旦左操作數為true,則范圍運算符將保持為true,直到右操作數為true,此后范圍運算符將再次變為false。 直到下次評估范圍運算符時,它才會變為假。 它可以測試正確的操作數,並在變為true的相同評估中變為false(如在awk中一樣 ),但一次仍返回true。 如果您不希望它在下一次求值之前測試正確的操作數,如sed中所示 ,只需使用三個點(“...
”)而不是兩個。 在所有其他方面,“...
”的行為與“..
”的行為相同。當運算符處於“ false”狀態時,不評估右操作數,而當運算符處於“ true”狀態時,不評估左操作數。 優先級略低於
||
和&&
。 返回的值是空字符串(如果為false)或序列號(從1開始)為true(真)。 將為遇到的每個范圍重置序列號。 范圍中的最后一個序列號附加有字符串“ E0” ,它不影響其數值,但是如果要排除端點,則可以進行搜索。 您可以通過等待序列號大於1來排除起點。如果標量“
..
”的任何一個操作數是一個常量表達式,則該操作數如果等於(==
)當前輸入行號($.
變量),則認為該操作數為true。
(強調)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.