我写了一个Perl脚本,下面会生成一个警告,我无法理解为什么。
#!/usr/local/bin/perl -w
$status = $ENV{ 'STATUS' };
if ( $status eq "" )
{
$status = 0;
}
else
{
$status = 1;
}
它说“Use of uninitialized value in string eq at ./x.pl line 4.
”
第4行是“if ( $status eq "" )
”行,但变量已初始化..
任何想法如何摆脱这个警告......
答案 0 :(得分:7)
另一种选择是
$status = $ENV{ 'STATUS' } // '';
如果未定义,则将$status
设置为空字符串,但//
运算符仅存在于perl 5.10及更高版本中。等效的5.10之前的语法是
$status = defined $ENV{STATUS} ? $ENV{STATUS} : '';
虽然很多人会伪装它
$status = $ENV{ 'STATUS' } || '';
但这会将$ENV{STATUS}
0更改为空字符串,这对您来说可能是也可能不是问题。
然而,这些都是一般情况的答案。在您发布的特定代码中,用
替换整个代码$status = defined $ENV{STATUS} ? 1 : 0;
甚至只是
$status = defined $ENV{STATUS};
(如果你的'not set'值是一个空字符串而不是0),那将是更好的选择。
答案 1 :(得分:6)
$ENV{'STATUS'}
可能未定义。
如果你跑
export STATUS=blah
在运行perl脚本之前在shell中,它将起作用
用
修复它#!/usr/local/bin/perl -w
$status = $ENV{ 'STATUS' };
if (!defined($status) || $status eq "" )
{
$status = 0;
}
else
{
$status = 1;
}
答案 2 :(得分:3)
我知道您的问题是关于警告但您可以使用conditional operator ?:设置$ status(如果未定义)或空字符串
$status = $ENV{'STATUS'} ? 1 : 0;