Come posso stampare un 'null' letterale per i valori non definiti in Perl?
Domanda
Sono in esecuzione di una query 'descrivere table' e restituisce valore di 'nulla' per la colonna 'default'. Tuttavia, quando si tenta di stampare il valore da database a una tabella HTML non è la stampa 'nulla'. E 'solo sempre vuota.
Questo è come mi sto memorizzare i dati dal database:
@nulls = ();
while (($null) = $sth1->fetchrow_array)
{
push (@nulls, $null);
}
Quando stampo il contenuto della serie @nulls
non è mai stampa il valore letterale di 'nulla'. E 'sempre vuota. Esiste un modo per superare questo problema?
Soluzione
Come ha detto Chris J, i valori nulli vengono restituiti come valori indefiniti.
Se tu avessi avvertimenti abilitato, che avrebbe ricevuto un "valore indefinito in stampa" avviso quando si stampa i valori. Utilizzando il strict
e warnings
pragmata può risparmiare un sacco di debug tempo. Il pragma diagnostics
aggiunge testo esplicativo aggiuntivo alle avvertenze standard e gli errori fatali.
E 'abbastanza facile per intrappolare e sostituire i valori NULL come vengono dal database:
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';
}
In alternativa si potrebbe costruire la matrice @nulls
allo stesso modo si mostra sopra, e quindi alterare i valori nulli in fase di visualizzazione.
my @pre_5_10 = map { defined $_ ? $_ : 'NULL' } @nulls;
my @perl_5_10 = map { $_ // 'NULL' } @nulls;
Altri suggerimenti
Dalla http://metacpan.org/pod/DBI , esso ritornerà valori nulli come 'undef'.
Non fare Perl, ma in ogni altra lingua che ho usato, è necessario verificare il valore per nulla. Se è null, stampare la stringa letterale "null".
Tu non dici quello del database che si sta utilizzando, ma si può fare a livello di SQL se non vi occupate di una soluzione non-portatile, per esempio, in Oracle:
select NVL(some_column, 'NULL')
from some_table