Wie kann ich drucken Sie eine wörtliche ‚null‘ für nicht definierte Werte in Perl?

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

  •  05-09-2019
  •  | 
  •  

Frage

Ich verwende eine Abfrage ‚beschreibt Tabelle‘ und kehrt Wert von ‚null‘ für die ‚default‘ Spalte. Allerdings, wenn ich versuche, den Wert aus der Datenbank in eine HTML-Tabelle zu drucken, ist es nicht gedruckt wird ‚null‘. Es ist nur immer leer.

Dies ist, wie ich die Daten aus der Datenbank zu speichern bin:

@nulls = ();

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

Wenn ich der Inhalt des Array drucken @nulls es nie den wörtlichen Wert von ‚null‘ druckt. Es ist immer leer. Gibt es eine Möglichkeit, dieses Problem zu überwinden?

War es hilfreich?

Lösung

Als Chris J sagte, werden die Nullwerte als undefinierte Werte zurückgegeben.

Wenn Sie Warnungen aktiviert hätte, hätte man einen „undefinierten Wert in print“ Warnung erhalten, wenn Sie die Werte gedruckt. die strict und warnings pragmata verwenden, können Sie viel Zeit Debuggen speichern. Die diagnostics Pragma fügt zusätzlichen Erläuterungstext zu den Standard-Warnungen und fatalen Fehlern.

Es ist ziemlich einfach zu stoppen und die NULL-Werte ersetzen, wie sie aus der Datenbank kommen:

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';
    }

Oder Sie könnten Ihre @nulls Array auf die gleiche Weise oben zeigen, bauen und dann die Nullen bei Anzeigezeit ändern.

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

Andere Tipps

http://metacpan.org/pod/DBI , wird es NULL-Werte zurück, wie 'undef'.

Ich mache kein Perl, aber in jeder anderen Sprache habe ich verwendet, müssen Sie den Wert für null testen. Wenn es null ist, aus dem Stringliteral „null“ drucken.

Sie sagen nicht, welche Datenbank Sie verwenden, aber Sie können es auf SQL-Ebene tun, wenn Sie nicht eine nicht tragbare Lösung nichts dagegen tun, zum Beispiel in Oracle:

select NVL(some_column, 'NULL')
from some_table
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top