Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl:验证命令行参数是整数而不是文件_Perl - Fatal编程技术网

Perl:验证命令行参数是整数而不是文件

Perl:验证命令行参数是整数而不是文件,perl,Perl,我需要检查(Perl)命令行参数是否只是一个整数和一个文件 我可以检查输入的参数数量是否正确: if (@ARGV != 2){ 我可以检查以确保参数的顺序正确: if ($ARGV[0] >= $ARGV[1]) 但是,我不知道如何检查参数是否是文件。如果是文件,我想打印错误消息 谢谢您可以使用-f检查给定字符串是否为文件。有关更多选项,请参见 在我理解的你的例子中: die 'First argument is a filename!' if -f $ARGV[0]; 您

我需要检查(Perl)命令行参数是否只是一个整数和一个文件

我可以检查输入的参数数量是否正确:

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";
}