Sca*_*ark 2 scripting perl warnings
我写了一个Perl脚本,下面会生成一个警告,我无法弄明白为什么.
#!/usr/local/bin/perl -w
$status = $ENV{ 'STATUS' };
if ( $status eq "" )
{
$status = 0;
}
else
{
$status = 1;
}
Run Code Online (Sandbox Code Playgroud)
它说" Use of uninitialized value in string eq at ./x.pl line 4."
第4行是" if ( $status eq "" )"行,但变量已初始化.
任何想法我怎么能摆脱这个警告..
另一种选择是
$status = $ENV{ 'STATUS' } // '';
Run Code Online (Sandbox Code Playgroud)
$status如果未定义,则将设置为空字符串,但//运算符仅存在于perl 5.10及更高版本中.等效的5.10之前的语法是
$status = defined $ENV{STATUS} ? $ENV{STATUS} : '';
Run Code Online (Sandbox Code Playgroud)
虽然很多人会假装它
$status = $ENV{ 'STATUS' } || '';
Run Code Online (Sandbox Code Playgroud)
但这会将$ENV{STATUS}0变为空字符串,这对您来说可能是也可能不是问题.
然而,这些都是一般情况下的答案.在您发布的特定代码中,将整个内容替换为
$status = defined $ENV{STATUS} ? 1 : 0;
Run Code Online (Sandbox Code Playgroud)
甚至只是
$status = defined $ENV{STATUS};
Run Code Online (Sandbox Code Playgroud)
(如果你没有'not set'值是一个空字符串而不是0)将是更好的选择.
$ENV{'STATUS'} 可能没有定义.
如果你跑
export STATUS=blah
Run Code Online (Sandbox Code Playgroud)
在运行perl脚本之前的shell中,它会起作用
解决它
#!/usr/local/bin/perl -w
$status = $ENV{ 'STATUS' };
if (!defined($status) || $status eq "" )
{
$status = 0;
}
else
{
$status = 1;
}
Run Code Online (Sandbox Code Playgroud)