boo*_*gie -5 perl command-line-arguments
我在跑
perl -ple '$_=length' datafile
Run Code Online (Sandbox Code Playgroud)
数据文件包含以下内容:
algorithm
student government
Fiumichino
Run Code Online (Sandbox Code Playgroud)
结果是它打印出来
9
18
10
Run Code Online (Sandbox Code Playgroud)
-p和-l选项有什么作用?还有,是什么$_?
$_是默认输入和模式搜索变量.-p是一个命令行开关,它while(<>)在程序周围放置一个隐式循环,最后是一个print语句.该-l组开关$/和$\成"\n"(新行),并chomp是你的输入,或者通俗地说,它处理新行你.
钻石操作员<>是"神奇的",因为它会自动选择您的输入通道.如果您的脚本有参数,它会将其解释为文件名,并打开该文件并读取它.如果没有,它会检查STDIN.在您的情况下,它会打开文件"datafile".
该oneliner所做的是读取每行数据文件并设置$_为$_(因为如果没有提供参数,则length使用$_),然后打印该数字.
你可以解析单行,看看代码是什么样的:
$ perl -MO=Deparse -ple '$_=length' datafile
BEGIN { $/ = "\n"; $\ = "\n"; }
LINE: while (defined($_ = <ARGV>)) {
chomp $_;
$_ = length $_;
}
continue {
die "-p destination: $!\n" unless print $_;
}
-e syntax OK
Run Code Online (Sandbox Code Playgroud)