¿Cómo puedo imprimir un 'nulo' literal valores no definidos en Perl?
Pregunta
Me postulo una consulta 'describir la tabla' y devuelve el valor 'nulo' para la columna 'por defecto'. Sin embargo, cuando intento imprimir el valor de la base de datos para una tabla HTML no se esté imprimiendo 'nulo'. Es simplemente siempre está en blanco.
Esta es la forma en que estoy almacenando los datos de la base de datos:
@nulls = ();
while (($null) = $sth1->fetchrow_array)
{
push (@nulls, $null);
}
Al imprimir el contenido de la matriz @nulls
nunca imprime el valor literal de 'nulo'. Siempre está en blanco. ¿Hay una manera de superar este problema?
Solución
Como dijo Chris J, los valores nulos se devuelven como valores no definidos.
Si se hubiera permitido a las advertencias, que habría recibido un "valor indefinido en la impresión" de advertencia cuando se imprime los valores. Utilizando el strict
y warnings
prágmata puede ahorrar mucho tiempo de depuración. El pragma diagnostics
añade el texto explicativo adicional a las advertencias estándar y errores fatales.
Es bastante fácil de atrapar y reemplazar los valores NULL ya que provienen de la base de datos:
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';
}
O se podría construir la matriz @nulls
la misma forma en que muestras arriba, y luego alterar los valores nulos en el tiempo de visualización.
my @pre_5_10 = map { defined $_ ? $_ : 'NULL' } @nulls;
my @perl_5_10 = map { $_ // 'NULL' } @nulls;
Otros consejos
http://metacpan.org/pod/DBI , devolverá los valores nulos como 'undef'.
No hacer Perl, pero en todos los demás idiomas que he usado, usted tiene que probar el valor de nulo. Si es nulo, imprima el "nulo" cadena literal.
Usted no dice lo que la base de datos que está utilizando, pero se puede hacer a nivel de SQL si no te importa una solución no portátil, por ejemplo, en Oracle:
select NVL(some_column, 'NULL')
from some_table