我正在寻找一种简单的方法来检查正确数量的命令行参数,如果发生错误则显示用法消息,然后立即退出。
我想到了像
这样的东西if (@ARGV < 3) {
print STDERR "Usage: $0 PATTERN [FILE...]\n";
exit 1;
}
这是一个有效的模式吗? Sry,我是一个完全的Perl noob: - )。
答案 0 :(得分:28)
另外,我强烈建议使用在Perl,Getopt::Long
模块中处理命令行参数的惯用方法(并开始使用命名参数而不是基于位置的参数)。
如果你有&lt; 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};
答案 1 :(得分:12)
另一种常见的方法是使用die
die "Usage: $0 PATTERN [FILE...]\n" if @ARGV < 3;
您可以在命令行中获得@ARGV
特殊变量的更多帮助:
perldoc -v @ARGV
答案 2 :(得分:5)
是的,没关系。 @ARGV
包含命令行参数,并在标量上下文中计算其编号。
(虽然您的错误消息看起来好像是@ARGV < 2
或< 1
。)
答案 3 :(得分:1)
使用$#ARGV获取perl脚本的传递参数总数,如下所示:
if (@#ARGV < 4)
我之前使用过并按http://www.cyberciti.biz/faq/howto-pass-perl-command-line-arguments/所示的方式工作。
请参阅http://perldoc.perl.org/perlvar.html的原始文档,其中指出:
@ARGV
数组@ARGV包含用于脚本的命令行参数。 $#ARGV通常是参数的数量减1,因为$ ARGV [0]是第一个参数,而不是程序的命令名本身。请参阅$ 0获取命令名称。
答案 4 :(得分:-3)
你可以用$#ARGV代替数组@ARGV
if ($#ARGV < 3) { ...