【问题标题】:flip-flop-operator/readline-counter question触发器操作员/读取线计数器问题
【发布时间】:2013-05-31 23:04:10
【问题描述】:

阅读此Perl: extract rows from 1 to n (Windows) 我不明白触发器操作符/读取线计数器部分。

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

1
2
3E0

谁能更详细地解释一下这个输出的来源?

【问题讨论】:

标签: perl counter readline flip-flop


【解决方案1】:

引用perlop

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

不计算右操作数 而运营商处于“假” 状态,并且左操作数不是 当操作员在 “真实”状态。优先级是 略低于||&&。价值 返回的要么是空字符串 为假,或序列号 (以 1 开头)为真。这 序列号被重置为每个 遇到的范围。 最后的序列 范围内的数字具有字符串“E0” 附加到它,这不影响 它的数值,但给你 如果你想搜索的东西 排除端点。你可以排除 通过等待的起点 序列号大于 1。

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

(强调)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-25
    • 1970-01-01
    • 2021-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多