Perl:验证命令行参数是整数而不是文件
我需要检查(Perl)命令行参数是否只是一个整数和一个文件 我可以检查输入的参数数量是否正确:Perl:验证命令行参数是整数而不是文件,perl,Perl,我需要检查(Perl)命令行参数是否只是一个整数和一个文件 我可以检查输入的参数数量是否正确: if (@ARGV != 2){ 我可以检查以确保参数的顺序正确: if ($ARGV[0] >= $ARGV[1]) 但是,我不知道如何检查参数是否是文件。如果是文件,我想打印错误消息 谢谢您可以使用-f检查给定字符串是否为文件。有关更多选项,请参见 在我理解的你的例子中: die 'First argument is a filename!' if -f $ARGV[0]; 您
if (@ARGV != 2){
我可以检查以确保参数的顺序正确:
if ($ARGV[0] >= $ARGV[1])
但是,我不知道如何检查参数是否是文件。如果是文件,我想打印错误消息
谢谢您可以使用
-f
检查给定字符串是否为文件。有关更多选项,请参见
在我理解的你的例子中:
die 'First argument is a filename!' if -f $ARGV[0];
您可以通过一些检查手动执行此操作
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();
}
它将生成自己的使用消息
$ perl ~/tmp/test.pl
usage: test.pl INTEGER FILENAME
Arguments:
INTEGER an integer
FILENAME a filename
对于未来的程序,它将处理--选项以及子命令
如果您不喜欢这一个,.要测试,例如,$ARGV[0]是否严格为整数,您可以使用以下谓词:
if ($ARGV[0] =~ /^\d+$/) {
print "an integer\n";
} else {
print "not an integer\n";
}
执行perldoc perlre
,了解更多信息
若要测试$ARGV[0]是否为文件,请使用以下内容:
if (-f $ARGV[0]) {
print "a file\n";
} else {
print "not a file\n";
}
执行perldoc-f-f
以获取有关文件相关测试的大量信息。如果其中一个参数不是整数,则比较将导致错误?不,它默认为代码中的一个打印错误。这将是一个警告:“参数在数值等式(=)中不是数字…”。只有当您有使用警告时才会出现错误代码>在脚本的开头。如果参数既是一个整数又是一个文件呢?我可以创建一个名为3
的文件…谢谢。我在找-f。我忘了死。我喜欢在那里使用-r
。。。非常重要。在大多数情况下,在正则表达式中,整数的含义应该通过[0-9]
匹配。除非您希望一般允许使用utf数字符号。
if (-f $ARGV[0]) {
print "a file\n";
} else {
print "not a file\n";
}