触发器 - 操作员/读线 - 计数器问题

时间:2010-11-01 17:41:28

标签: perl counter readline flip-flop

读这个Perl: extract rows from 1 to n (Windows)我不理解触发器 - 操作符/读取线 - 计数器部分。

perl -nE 'say $c if $c=1..3' my_file 
  

1
  2
  3E0

有人可以更详细地解释一下这个输出的来源吗?

1 个答案:

答案 0 :(得分:3)

引用perlop

  

在标量上下文中,“..”返回a   布尔值。运营商是   双稳态,如触发器,和   模拟行范围(逗号)   运营商 sed awk ,各种各样   编辑。每个“..”运算符都维护   它自己的布尔状态,甚至跨越   调用包含的子例程   它。只要它的左边就是假的   操作数是假的。一旦离开   操作数是真的,范围运算符   在右操作数为止之前保持为真   是的,AFTER是范围操作员   再次变得虚假。它不会成为   假到下一次的范围   运算符被评估。它可以测试   正确的操作数,并成为虚假的   同样的评价它成为现实(如    awk ),但它仍然返回true一次。   如果你不想让它测试正确的话   操作数直到下一次评估为止   在 sed 中,只需使用三个点(“...”)   而不是两个。在所有其他方面,   “...”的行为就像“..”一样。

     

不评估右操作数   而操作员处于“假”状态   状态,左操作数不是   在运营商所在的时候进行评估   “真实”的状态。优先权是   低于||&&。价值   返回的是空字符串   表示错误或序列号   (从1开始)为真。该   序列号为每个重置   遇到的范围。 最后的序列   范围内的数字包含字符串“E0”   附加到它 ,这不会影响   它的数值,但给你   如果你想要搜索的东西   排除端点。你可以排除   通过等待的开始点   序号大于1.

     

如果标量“..”的任一操作数是a   常量表达式,该操作数是   如果相等则认为是真的(==)   到当前的输入行号(   $.变量)。

(强调补充)