Como posso imprimir um 'nulo' literal valores indefinidos em Perl?
Pergunta
Estou executando uma consulta 'descrever tabela' e ele retorna valor de 'null' para a coluna 'default'. No entanto, quando tento imprimir o valor do banco de dados a uma tabela HTML não está imprimindo 'null'. É apenas sempre em branco.
Isto é como eu sou armazenar os dados do banco de dados:
@nulls = ();
while (($null) = $sth1->fetchrow_array)
{
push (@nulls, $null);
}
Quando eu imprimir o conteúdo de @nulls
variedade nunca imprime o valor literal de 'null'. É sempre em branco. Existe uma maneira de superar esse problema?
Solução
Como Chris J disse, os valores nulos são devolvidos como valores indefinidos.
Se você tivesse avisos ativado, você teria recebido um "valor indefinido na impressão" de aviso quando você imprimiu os valores. Usando o strict
e warnings
pragmata pode economizar muito tempo de depuração. O pragma diagnostics
acrescenta texto explicativo adicional para os avisos padrão e erros fatais.
É muito fácil para interceptar e substituir os valores nulos como eles vêm do banco de dados:
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';
}
Ou você poderia construir sua matriz @nulls
da mesma maneira que você mostra acima, e depois alterar os valores nulos no tempo de exibição.
my @pre_5_10 = map { defined $_ ? $_ : 'NULL' } @nulls;
my @perl_5_10 = map { $_ // 'NULL' } @nulls;
Outras dicas
http://metacpan.org/pod/DBI , ele retornará valores nulos como 'undef'.
Eu não faço Perl, mas em todas as outras línguas que eu usei, você tem que testar o valor nulo. Se for nulo, imprimir a string literal "null".
Você não diz qual banco de dados você está usando, mas você pode fazê-lo no nível do SQL se você não se importa uma solução não-portáteis, por exemplo, em Oracle:
select NVL(some_column, 'NULL')
from some_table