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

时间:2010-02-22 18:36:13

标签: perl

我见过这个单行

perl -lane '$_{$F[0]}+=$F[1]}print"$_ $_{$_}"for keys%_;{' file

此处:How can I sum values in column based on the value in another column?

我不记得最后的“{”是如何工作的。 有人可以解释它是如何工作的吗?

1 个答案:

答案 0 :(得分:16)

来自Perl help

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

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

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

这是对-n开关的滥用,因为由于原始程序中的}不匹配,while循环会提前关闭。但是}开关添加的结束-n仍然需要与某些东西匹配,这就是为什么在程序结束时需要额外的{,即使它什么都不做。

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

相关问题