Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.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_Command Line Arguments - Fatal编程技术网

Perl-未初始化值的使用?

Perl-未初始化值的使用?,perl,command-line-arguments,Perl,Command Line Arguments,所以我试着运行这个代码 my $filePath = $ARGV['0']; if ($filePath eq ""){ print "Missing argument!"; } 它应该检查第一个命令行参数,并告诉我它是否为空,但它返回此错误,我无法找出原因: Use of uninitialized value $filePath in string eq at program.pl line 19. 我做错了什么?空和未初始化不是一回事。您可以检查变量是否使用定义的运算符初始化,

所以我试着运行这个代码

my $filePath = $ARGV['0'];
if ($filePath eq ""){
    print "Missing argument!";
}
它应该检查第一个命令行参数,并告诉我它是否为空,但它返回此错误,我无法找出原因:

Use of uninitialized value $filePath in string eq at program.pl line 19.

我做错了什么?

空和未初始化不是一回事。您可以检查变量是否使用
定义的
运算符初始化,例如:

if ((!defined $filePath) || ($filePath eq "")) {
 # $filePath is either not initialized, or initialized but empty
 ...
}
我很确定你的意思是:

my $filePath = $ARGV[0];

(不带引号)

编辑:正如@Andrew指出的,这是不同的,因为它将在文件名为“0”时失败

而且,代替

如果((!defined$filePath)| |($filePath eq“”){

正如@Mat所写,您可以使用更简单的

如果(!$filePath){


它的作用完全相同

只需检查是否定义了$ARGV[0]

#!/usr/bin/perl
use strict;
use warnings;

if(!defined $ARGV[0]){
    print "No FilePath Specified!\n";
}
如果没有传递任何命令行,这将打印“未指定文件路径!\n”

您遇到的问题是,您正在将$filePath设置为未定义的值。警告正在抱怨,因为您随后尝试将未定义的值与“”进行比较。警告认为值得告诉您

我用我的示例展示了一种检查某事物是否已定义的干净方法,但从技术上讲,您也可以这样做:

if(!@ARGV){
    print "No FilePath Specified!\n";
}

备选答案是,如果未定义默认值,则设置默认值:

my $filePath = $ARGV[0] // '';

不是100%相同。这会将完全合法的文件名“0”视为false。“| |”选项不是100%相同。它会将完全合法的文件名“0”视为丢失,并提供默认值。我喜欢:
如果(!defined$filePath | |!length$filePath)
数组索引周围有什么