0

我编写了一个 perl 脚本,在某些情况下我必须将一个空字符串复制到一个文件中。
例如,$str是一个包含 MySQL 表中行数的变量。
假设如果表中没有行,则将空字符串复制到变量$str中。存储的这个值$str需要复制到另一个文件中。我怎样才能做到这一点?当我试图复制时,我收到了这个警告:

Use of uninitialized value $str in string at test.pl line 23
4

2 回答 2

8

''空字符串 ( 、""q()) 和未定义值 ( )之间存在差异undef。只有最后一个会触发您提到的警告。

如果应该保存行数,在这种情况下保存0:

$str //= 0;
于 2013-06-12T11:16:52.303 回答
4

我假设您只担心警告?如果您有此声明或类似声明:

print $str;

您会收到上述警告,这是因为$str包含 undef 值。该undef值将在此语句中转换为空字符串,因此您可以这样做:

print $str // "";   # defined or operator 

请注意,这是一种隐藏$str警告的方法,因此如果未定义的值表明存在错误,请不要这样做。

我认为,如果您尝试从中获取行数DBI并且得到的是undefvalue 而不是 zero 0那么您做错了什么,您应该查看您的 DBI 代码并在那里搜索问题。

如果您确定这undef意味着 zero 0,则可以执行显式转换:

$str += 0;          # undef is converted to 0

请注意,这只适用于 undef。您也可以使用定义或赋值运算符:

$str //= 0;

如果你的 perl 版本太低,你可以在这种情况下使用类似的语句:

$str ||= 0;

如果$str包含任何错误值,则有效。

于 2013-06-12T11:15:26.133 回答