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