运行
perl -n
或perl -p
时,每个命令行参数都被视为要逐行打开和处理的文件。如果您想将命令行开关传递给该脚本,我该怎么做?
在不使用 STDIN 或外部存储的情况下将信息传递给 Perl 的主要方法有三种。
论据
使用
-n
或 -p
时,提取 BEGIN
块中的参数。
perl -ne'BEGIN { ($x,$y)=splice(@ARGV,0,2) } f($x,$y)' -- "$x" "$y" ...
命令行选项
在完整的程序中,您可以使用 Getopt::Long,但是
perl -s
在这里就可以了。
perl -sne'f($x,$y)' -- -x="$x" -y="$y" -- ...
环境变量
X="$x" Y="$y" perl -ne'f($ENV{X},$ENV{Y})' -- ...
这是一个简短的示例程序(将其命名为
t.pl
),您可以如何做到:
#!/bin/perl
use Getopt::Std;
BEGIN {
my %opts;
getopts('p', \%opts);
$prefix = defined($opts{'p'}) ? 'prefix -> ' : '';
}
print $prefix, $_;
这样称呼它:
perl -n t.pl file1 file2 file3
或(将为每行添加前缀):
perl -n t.pl -p file1 file2 file3