最近我遇到这种方式来过滤出列表的每个第二个值:
perl -E 'say grep --$|,1..10' 13579
它是如何工作的?
解决方法
$ |是一个特殊的Perl变量,只能有0和1的值。
任何赋值给$ |一个真正的非零值,就像
任何赋值给$ |一个真正的非零值,就像
$| = 1;$| = 'foo';$| = "4asdf"; # 0 + "4asdf" is 4 $| = \@a;
将具有设置$ |的效果到1.任何分配一个假的零值
$| = 0; $| = ""; $| = undef; $| = "erk"; # 0 + "erk" is 0
将设置$ |到0。
展开 – $ |到$ | = $ | – 1,现在你可以看到发生了什么。如果$ |原来是1,那么 – $ |将值更改为0。如果$ |原来是0,那么 – $ |将尝试将值设置为-1,但实际将值设置为1。