在Perl中检查有效命令行参数的简便方法?

hel*_*hod 12 perl

我正在寻找一种简单的方法来检查正确数量的命令行参数,如果发生错误则显示用法消息,然后立即退出.

我想到了类似的东西

if (@ARGV < 3) {
  print STDERR "Usage: $0 PATTERN [FILE...]\n";
  exit 1;
}
Run Code Online (Sandbox Code Playgroud)

这是一个有效的模式吗?Sry,我是一个完全Perl noob :-).

DVK*_*DVK 28

另外,我强烈建议使用在Perl,Getopt::Long模块中处理命令行参数的惯用方法(并开始使用命名参数而不是基于位置的参数).

如果你有<3个参数,你真的不关心.如果你有参数a,b和C,你通常会关心.

就命令行界面设计而言,3个参数是关于位置参数(cmd <arg1> <arg2>)与任何顺序(cmd -arg1 <arg1> -arg2 <arg2>)的命名参数之间的截止点.

所以你最好做的事情:

use Getopt::Long;
my %args;
GetOptions(\%args,
           "arg1=s",
           "arg2=s",
           "arg3=s",
) or die "Invalid arguments!";
die "Missing -arg1!" unless $args{arg1};
die "Missing -arg2!" unless $args{arg2};
die "Missing -arg3!" unless $args{arg3};
Run Code Online (Sandbox Code Playgroud)


too*_*lic 12

另一种常见的方法是使用die

die "Usage: $0 PATTERN [FILE...]\n" if @ARGV < 3;
Run Code Online (Sandbox Code Playgroud)

您可以@ARGV在命令行中获得有关特殊变量的更多帮助:

perldoc -v @ARGV
Run Code Online (Sandbox Code Playgroud)


Tim*_*Tim 5

是的,没关系.@ARGV包含命令行参数,并在标量上下文中计算它们的编号.

(虽然它看起来像你的意思@ARGV < 2< 1来自你的错误信息.)