繁体   English   中英

触发器运算符/ readline-counter问题

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

在标量上下文中,“ .. ”返回布尔值。 运算符是双稳态的,就像触发器一样,它模拟sedawk和各种编辑器的行范围(逗号)运算符。 每个“ .. ”运算符都保持自己的布尔状态,即使在包含该状态的子例程的调用之间也是如此。 只要其左操作数为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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM