如何在Perl中为未定义值打印文字'null'?

问题描述:

我正在运行查询“描述表”,并且它为'默认'列返回'null'的值。但是,当我尝试将数据库中的值打印到HTML表格时,它不打印“null”。它总是空白。如何在Perl中为未定义值打印文字'null'?

这是怎么了,我从数据库中存储数据:

@nulls =(); 

while (($null) = $sth1->fetchrow_array) 
    { 
    push (@nulls, $null); 
    } 

当我打印阵列@nulls的内容,它永远不会打印“空”的字面意义。它始终是空白的。有没有办法解决这个问题?

正如Chris J所说,空值作为未定义的值返回。

如果启用了警告,则在打印值时,您将收到“未定义的打印值”警告。使用strictwarnings 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”。

+0

不是Perl的家伙,但是在我使用的语言中,来自数据库的'null'与语言中的'null'不同。因此应该小心测试数据库'空'值而不是语言'空'值。 – 2009-02-23 04:47:59

http://metacpan.org/pod/DBI开始,它将返回空值为'undef'。

你不说你正在使用的数据库,但你可以在SQL级别做,如果你不介意的非便携式解决方案,例如,在Oracle:

select NVL(some_column, 'NULL') 
from some_table