运行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