我编写了一个perl脚本,在某些情况下,我必须将空字符串复制到文件中
例如,$str
是一个变量,它包含MySQL表中的行数
假设表中没有行,则将空字符串复制到变量$str
。存储在$str
中的此值需要复制到另一个文件。我怎样才能做到这一点?
当我试图复制时,我收到了这个警告:
Use of uninitialized value $str in string at test.pl line 23
答案 0 :(得分:8)
空字符串(''
,""
或q()
)与未定义值(undef
)之间存在差异。只有最后一个会触发您提到的警告。
如果要保存行数,请在这种情况下保存0:
$str //= 0;
答案 1 :(得分:4)
我认为你只是担心这个警告?如果您有此声明或类似声明:
print $str;
你得到上面提到的警告,这是因为$str
包含undef值。 {1}}值将在此语句中转换为空字符串,因此您可以执行以下操作:
undef
请注意,这是一种隐藏警告的方法,所以如果print $str // ""; # defined or operator
中的未定义值表明出现了问题,请不要这样做。
我认为如果您尝试从$str
获取行数并获得DBI
值而不是undef
,那么那么您正在做某事错了,您应该查看您的DBI代码并在那里搜索问题。
如果您确定0
表示零undef
,则可以执行显式转换:
0
请注意,这仅适用于undef。您也可以使用定义或赋值运算符:
$str += 0; # undef is converted to 0
如果你的perl版本太低,你可以在这种情况下使用类似的声明:
$str //= 0;
如果$str ||= 0;
包含任何错误值,则有效。