String 如何将空字符串复制到文件中

String 如何将空字符串复制到文件中,string,perl,file,String,Perl,File,我编写了一个perl脚本,在某些情况下,我必须将空字符串复制到文件中。 例如,$str是一个变量,它包含MySQL表中的行数。 假设表中没有行,则将空字符串复制到变量$str。存储在$str中的此值需要复制到另一个文件。我该怎么做? 当我试图复制时,我收到了以下警告: Use of uninitialized value $str in string at test.pl line 23 我想你只是担心这个警告?如果您有此声明或类似声明: print $str; 您会得到上面提到的警告,这是

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

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

我想你只是担心这个警告?如果您有此声明或类似声明:

print $str;
您会得到上面提到的警告,这是因为$str包含未定义的值。undef值将在此语句中转换为空字符串,因此您可以执行以下操作:

print $str // "";   # defined or operator 
请注意,这是一种隐藏警告的方法,因此,如果$str中未定义的值表示有问题,则千万不要这样做

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

如果确定undef表示0,则可以执行显式转换:

$str += 0;          # undef is converted to 0
请注意,这仅适用于undef。您也可以使用定义运算符或赋值运算符:

$str //= 0;
如果您的perl版本太低,您可以在本例中使用类似的语句:

$str ||= 0;
$str //= 0;

如果$str包含任何假值,则该选项有效。

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

如果应保存行数,则在此情况下保存0:

$str ||= 0;
$str //= 0;

这是一个哲学问题吗?如何打印空字符串?@TLP我遇到了这个问题,需要复制表中的行数。如果没有行,则给出一个空集,即空字符串。我怎样才能找到解决办法呢?你只说了一半:如果没有行,那怎么办?如何找到打印空字符串的解决方案?不能,因为无法打印空字符串。您可能想要的是打印0,或者打印未找到的行,或者其他一些解决方案,但是,除非您说出您想要的,否则很难告诉您您想要的,除了猜测。如果您将行计数作为未定义而不是0,我想知道您的DBI中是否没有某种错误。@TLP您说这是DBI中的错误