如何在Perl中为未定义值打印文字'null'?
问题描述:
我正在运行查询“描述表”,并且它为'默认'列返回'null'的值。但是,当我尝试将数据库中的值打印到HTML表格时,它不打印“null”。它总是空白。如何在Perl中为未定义值打印文字'null'?
这是怎么了,我从数据库中存储数据:
@nulls =();
while (($null) = $sth1->fetchrow_array)
{
push (@nulls, $null);
}
当我打印阵列@nulls
的内容,它永远不会打印“空”的字面意义。它始终是空白的。有没有办法解决这个问题?
答
正如Chris J所说,空值作为未定义的值返回。
如果启用了警告,则在打印值时,您将收到“未定义的打印值”警告。使用strict
和warnings
pragmata可以节省大量的时间调试。 diagnostics
编译指示向标准警告和致命错误添加了其他解释性文本。
这是很容易捕获和他们来自数据库替换NULL值:
use strict;
use warnings;
my @nulls =();
while ((my $null) = $sth1->fetchrow_array)
{
# before perl 5.10: use the ternary operator.
push @nulls, defined $null ? $null : 'NULL';
# perl 5.10 adds the defined-or operator: //
push @nulls, $null // 'NULL';
}
或者你可以建立自己的@nulls
阵列您在上面表现出同样的方式,然后改变在显示时间的空。
my @pre_5_10 = map { defined $_ ? $_ : 'NULL' } @nulls;
my @perl_5_10 = map { $_ // 'NULL' } @nulls;
答
我不会做Perl,但是在我用过的其他语言中,您必须测试null的值。如果它为空,则输出字符串文字“null”。
答
你不说你正在使用的数据库,但你可以在SQL级别做,如果你不介意的非便携式解决方案,例如,在Oracle:
select NVL(some_column, 'NULL')
from some_table
不是Perl的家伙,但是在我使用的语言中,来自数据库的'null'与语言中的'null'不同。因此应该小心测试数据库'空'值而不是语言'空'值。 – 2009-02-23 04:47:59