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

问题描述 投票:0回答:2

运行

perl -n
perl -p
时,每个命令行参数都被视为要逐行打开和处理的文件。如果您想将命令行开关传递给该脚本,我该怎么做?

perl command-line-interface
2个回答
8
投票

在不使用 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})' -- ...
    

0
投票

这是一个简短的示例程序(将其命名为

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
© www.soinside.com 2019 - 2024. All rights reserved.