如何在Perl单行中调用模块?

Zai*_*aid 8 perl module

假设我有一个我想要处理的数据文件; 我想获取每列的最大值并将其附加到每行的末尾.

INPUT:

T1 T2 T3
35.82 34.67 31.68
32.20 34.52 33.59
37.41 38.64 37.56
Run Code Online (Sandbox Code Playgroud)

OUTPUT:

T1 T2 T3
35.82 34.67 31.68 35.82
32.20 34.52 33.59 34.52
37.41 38.64 37.56 38.64
Run Code Online (Sandbox Code Playgroud)

我试图将其作为一个单行程来实现.到目前为止,这是我提出的,虽然它抱怨 &main::max未定义:

perl -MList::Util -ani.bak -e "print qq(@F).q( ).max(@F).qq(\n)" file1.txt
Run Code Online (Sandbox Code Playgroud)

好像我没有加载List::Util模块.怎么了?标题栏是一个问题吗?

perlrun没有关于如何做到这一点的体面的例子(实际上它确实如此,我的文档有点难以阅读).

Gre*_*con 21

您已加载List::Util,但模块默认情况下不导出符号.通过检查是否$.为1来跳过标题行.

$ perl -MList::Util=max -ape 's/$/" " . max(@F)/e unless $.==1' input 
T1 T2 T3
35.82 34.67 31.68 35.82
32.20 34.52 33.59 34.52
37.41 38.64 37.56 38.64

perlrun文档解释:

一点点内置语法糖意味着你也可以说-mmodule = foo,bar-Mmodule = foo,bar作为快捷方式-Mmodule qw(foo bar).这避免了在导入符号时使用引号的需要.-Mmodule = foo生成的实际代码是use module split(/,/,q{foo,bar}).请注意,该=表单删除了-m-M之间的区别.