どのように私はPerlで未定義の値のリテラル「ヌル」を印刷することができますか?
質問
私は「テーブルを記述する」クエリを実行していますし、それが「デフォルト」列の「NULL」の値を返します。私はHTMLのテーブルにデータベースから値を印刷しようとすると、しかし、それは「ヌル」を印刷していません。それはちょうど、常に空白です。
これは、私は、データベースからのデータを格納しています方法です。
@nulls = ();
while (($null) = $sth1->fetchrow_array)
{
push (@nulls, $null);
}
私は印刷すると配列の内容は、それが「NULL」のリテラル値を出力することはありません@nulls
。それは常に空白です。この問題を克服する方法はありますか?
解決
のように、ヌル値が未定義の値として返されます。
あなたは警告が有効になっていた場合は、値を印刷したとき、あなたは「印刷に未定義の値が」警告を受けているだろう。 strict
とwarnings
プラグマを使用すると、時間のデバッグを大幅に節約することができます。 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;
他のヒント
http://metacpan.org/pod/DBI のことから、それはのようにNULL値を返します。 'undefを' ます。
私はPerlを行いませんが、私が使用した他のすべての言語で、あなたはNULL値をテストする必要があります。それがnullの場合、文字列リテラル「ヌル」を印刷します。
オラクルでは、例えば、あなたが使っているものをデータベース言いませんが、あなたは非ポータブルソリューションを気にしない場合は、SQLレベルでそれを行うことができます:
select NVL(some_column, 'NULL')
from some_table