读这个Perl: extract rows from 1 to n (Windows)我不理解触发器 - 操作符/读取线 - 计数器部分。
perl -nE 'say $c if $c=1..3' my_file
1
2
3E0
有人可以更详细地解释一下这个输出的来源吗?
答案 0 :(得分:3)
引用perlop:
在标量上下文中,“
..
”返回a 布尔值。运营商是 双稳态,如触发器,和 模拟行范围(逗号) 运营商 sed , awk ,各种各样 编辑。每个“..
”运算符都维护 它自己的布尔状态,甚至跨越 调用包含的子例程 它。只要它的左边就是假的 操作数是假的。一旦离开 操作数是真的,范围运算符 在右操作数为止之前保持为真 是的,AFTER是范围操作员 再次变得虚假。它不会成为 假到下一次的范围 运算符被评估。它可以测试 正确的操作数,并成为虚假的 同样的评价它成为现实(如 awk ),但它仍然返回true一次。 如果你不想让它测试正确的话 操作数直到下一次评估为止 在 sed 中,只需使用三个点(“...
”) 而不是两个。在所有其他方面, “...
”的行为就像“..
”一样。不评估右操作数 而操作员处于“假”状态 状态,左操作数不是 在运营商所在的时候进行评估 “真实”的状态。优先权是 低于
||
和&&
。价值 返回的是空字符串 表示错误或序列号 (从1开始)为真。该 序列号为每个重置 遇到的范围。 最后的序列 范围内的数字包含字符串“E0” 附加到它 ,这不会影响 它的数值,但给你 如果你想要搜索的东西 排除端点。你可以排除 通过等待的开始点 序号大于1.如果标量“
..
”的任一操作数是a 常量表达式,该操作数是 如果相等则认为是真的(==
) 到当前的输入行号($.
变量)。
(强调补充)