Perl - 使用未初始化的值?

时间:2011-03-20 13:06:37

标签: 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.

我做错了什么?

4 个答案:

答案 0 :(得分:18)

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

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

if(!defined $ARGV[0]){
    print "No FilePath Specified!\n";
}

如果没有通过命令行,则会打印“No FilePath Specified!\ n”。

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

我用我的例子来展示一种检查某些东西是否已定义的简洁方法,但从技术上讲,你也可以这样做:

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

答案 1 :(得分:9)

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

if ((!defined $filePath) || ($filePath eq "")) {
 # $filePath is either not initialized, or initialized but empty
 ...
}

我很确定你的意思是:

my $filePath = $ARGV[0];

(不含引号)

答案 2 :(得分:2)

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

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

答案 3 :(得分:0)

编辑:正如@Andrew指出的那样,这不一样,因为文件名为“0”会失败

此外,而不是

  

if((!defined $ filePath)||($ filePath eq“”)){...

正如@Mat所写。你可以使用更简单的

  

if(!$ filePath){...

完全相同