Comment puis-je imprimer un « null » littérale pour les valeurs non définies en Perl?

StackOverflow https://stackoverflow.com/questions/576536

  •  05-09-2019
  •  | 
  •  

Question

Je dirigeais une requête « décrire table » et renvoie la valeur de « nulle » pour la colonne « par défaut ». Cependant, lorsque je tente d'imprimer la valeur de base de données à une table HTML n'imprime « null ». Il est tout simplement toujours vide.

Voici comment je stocke les données de base de données:

@nulls = ();

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

Quand j'imprimer le contenu du tableau @nulls il imprime jamais la valeur littérale de « nul ». Il est toujours vide. Est-il un moyen de remédier à ce problème?

Était-ce utile?

La solution

Chris J dit, les valeurs nulles sont renvoyées en tant que valeurs non définies.

Si vous aviez activé l'alerte, vous auriez reçu un avertissement « valeur non définie dans l'impression » lorsque les valeurs que vous avez imprimée. Utilisation de la pragmata de strict et warnings peut économiser beaucoup de temps à déboguer. Le pragma diagnostics ajoute un texte explicatif supplémentaire aux avertissements standard et des erreurs fatales.

Il est assez facile de piéger et de remplacer les valeurs NULL comme ils proviennent de la base de données:

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 vous pouvez construire votre tableau @nulls la même manière que vous montrer ci-dessus, puis modifier les valeurs nulles au moment de l'affichage.

my @pre_5_10  = map { defined $_ ? $_ : 'NULL' } @nulls;
my @perl_5_10 = map { $_ // 'NULL' } @nulls;

Autres conseils

De http://metacpan.org/pod/DBI , il renvoie les valeurs nulles comme 'undef'.

Je ne fais pas Perl, mais dans toutes les autres langues que je l'ai utilisé, vous devez tester la valeur NULL. Si elle est nulle, imprimez la chaîne « null ».

Vous ne dites pas ce que la base de données que vous utilisez, mais vous pouvez le faire au niveau SQL si vous ne me dérange pas une solution non-portable, par exemple, dans Oracle:

select NVL(some_column, 'NULL')
from some_table
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top