2009-02-23 34 views
3

我正在運行查詢「描述表」,並且它爲'默認'列返回'null'的值。但是,當我嘗試將數據庫中的值打印到HTML表格時,它不打印「null」。它總是空白。如何在Perl中爲未定義值打印文字'null'?

這是怎麼了,我從數據庫中存儲數據:

@nulls =(); 

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

當我打印陣列@nulls的內容,它永遠不會打印「空」的字面意義。它始終是空白的。有沒有辦法解決這個問題?

回答

13

正如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; 
2

我不會做Perl,但是在我用過的其他語言中,您必須測試null的值。如果它爲空,則輸出字符串文字「null」。

+0

不是Perl的傢伙,但是在我使用的語言中,來自數據庫的'null'與語言中的'null'不同。因此應該小心測試數據庫'空'值而不是語言'空'值。 – 2009-02-23 04:47:59

1

你不說你正在使用的數據庫,但你可以在SQL級別做,如果你不介意的非便攜式解決方案,例如,在Oracle:

select NVL(some_column, 'NULL') 
from some_table