我看过这个单行
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关闭仍然需要与某些内容匹配,这就是为什么{在程序结束时需要额外的内容,即使它没有做任何事情.
换句话说,最后一个的唯一原因{是不会给出语法错误.