{Perl one-liner的末尾是什么意思?

sid*_*com 2 perl

我看过这个单行

perl -lane '$_{$F[0]}+=$F[1]}print"$_ $_{$_}"for keys%_;{' file
Run Code Online (Sandbox Code Playgroud)

这里:如何根据另一列中的值对列中的值求和?

我不记得最后的"{"是如何工作的.有人能解释它是如何工作的吗?

Mar*_*ers 16

Perl帮助:

-n   assume "while (<>) { ... }" loop around program

这纯粹是一个文本操作,因此它给出了这个程序:

while (<>) { $_{$F[0]}+=$F[1]}print"$_ $_{$_}"for keys%_;{ }
Run Code Online (Sandbox Code Playgroud)

这是对-n交换机的滥用,因为while循环由于}原始程序中无法匹配而提前关闭.但是,交换机}添加的-n关闭仍然需要与某些内容匹配,这就是为什么{在程序结束时需要额外的内容,即使它没有做任何事情.

换句话说,最后一个的唯一原因{是不会给出语法错误.

  • (在我看来)更好的方法是使用`END {}`块. (3认同)
  • 可能会很高兴提到-MO = Deparse (2认同)