如何在-n或-p模式下使用Perl处理选项



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

最新更新