2017-12-22 5 views
-2

Ich lade einige Variablen aus der URL und möchte in mein CGI-Skript einchecken, ob sie initialisiert sind. Ich habe schnell herausgefunden, dass ich in Perl keine nicht initialisierten Werte in eine Liste schreiben kann.Verwendung von nicht initialisierten Werten in einer Liste

Mein Ansatz bestand einfach darin, die Liste zu durchlaufen und eine Switch-Variable $sucessDOM zu verwenden (1, wenn alle Daten initialisiert worden waren und 0 an anderer Stelle).

kam ich mit auf den Punkt:

### Read data from HTML 
my $mailinglist = param('mailinglist'); 
my $firstname = param('firstname'); 
my $lastname = param('lastname'); 
my $mail  = param('mail'); 

my $sucessDOM = 0; 

my @DOM = { $mailinglist, $firstname, $lastname, $mail }; 

### Data validation 
for my $data (@DOM) { 

    if ($data eq undef) { 
     $sucessDOM = $sucessDOM + 1; 
    } 

    if ($sucessDOM = @DOM) { 
     print "@DOM\n"; 
     $sucessDOM = 1; 
    } 
    else { 
     $sucessDOM = 0; 
    } 
} 

Der Ausgang ist als

[Fri Dec 22 20:30:40 2017] read_form.cgi: Use of uninitialized value $mailinglist in anonymous hash ({}) at ./read_form.cgi line 20. 
[Fri Dec 22 20:30:40 2017] read_form.cgi: Use of uninitialized value $lastname in anonymous hash ({}) at ./read_form.cgi line 20. 
[Fri Dec 22 20:30:40 2017] read_form.cgi: Use of uninitialized value in string eq at ./read_form.cgi line 24. 
HASH(0x55c8a73eeea8) 

folgt Ich kann auch nicht verstehen, warum es Fehler nur zwei Werte im Array, wenn sie alle nicht initialisierten sind , da ich das Skript direkt ausführe, ohne irgendwelche Werte zu übergeben.

+0

'my $ successDOM = grep $ Mailingliste, $ Vornamen, Nachnamen $, $ mail;' {definiert ($ _)!} – ikegami

Antwort

3

Sie haben mindestens vier Probleme mit Ihrem Code:

Zuerst {} macht einen anonymen Hash und gibt einen Verweis auf sie; Dies ist ein einzelner Wert, der in @DOM endet. Die Warnungen sind, weil Hash-Schlüssel Zeichenfolgen sein müssen, und warnen, wenn sie undef sind. Sie sollten wie

my @DOM = ($mailinglist, $firstname, $lastname, $mail); 

Zweitens werden die Zuordnung eq Strings vergleicht, so wäre es undef zu '' konvertieren. Um zu testen, ob $ data undef, sind

if (! defined $data) { 

Drittens Sie überprüfen, ob alle Array-Elemente erfolgreich waren innerhalb der for-Schleife (wo das wird aber die letzte Iteration der Schleife auf jeder nicht wahr sein). Verschieben Sie den Block if ($successDOM... nach der for-Schleife.

Vierte, = ist nur ein Zuweisungsoperator; verwenden == für numerischen Vergleich:

if ($successDOM == @DOM) { 
Verwandte Themen