我需要检查(Perl)命令行参数是否只是一个整数和一个文件.
我可以检查是否输入了正确数量的参数:
if (@ARGV != 2){
Run Code Online (Sandbox Code Playgroud)
并且,我可以检查以确保参数的顺序是正确的:
if ($ARGV[0] >= $ARGV[1])
Run Code Online (Sandbox Code Playgroud)
但是,我不知道如何检查参数是否是一个文件.我想打印和错误消息,如果它是一个文件.
谢谢
您可以通过一些检查手动完成此操作.
sub usage {
return "$0 <integer> <filename>\n";
}
if( @ARGV != 2 || # right number of arguments
$ARGV[0] !~ /^\d+$/ || # first one is an integer
!-f $ARGV[1] || # second is a readable file
!-r $ARGV[1]
) {
die usage();
}
Run Code Online (Sandbox Code Playgroud)
请注意,不需要额外检查参数的顺序是否正确.
或者你可以用像Getopt :: Args这样的模块来做.这是一个更好的解决方案,因为它是声明性的,并消除了大量的冗余和潜在的错误.
#!/usr/bin/env perl
use strict;
use warnings;
use v5.10;
use Getopt::Args;
arg integer => (
isa => 'Int',
required => 1,
comment => 'an integer',
);
arg filename => (
isa => 'Str',
required => 1,
comment => 'a filename',
);
# Extra checks for a readable filename.
my $args = optargs();
if( !-r $args->{filename} ||
!-f $args->{filename}
) {
die usage();
}
Run Code Online (Sandbox Code Playgroud)
它将产生自己的使用信息.
$ perl ~/tmp/test.pl
usage: test.pl INTEGER FILENAME
Arguments:
INTEGER an integer
FILENAME a filename
Run Code Online (Sandbox Code Playgroud)
对于将来的程序,它也将处理--options和子命令.
如果您不喜欢这个,可以选择许多Getopt模块.