Use of uninitialized value in string eq (...)
Peter Mairhofer
- perl
Hallo!
Ich arbeite grundsätzlich mit "use strict". Allerdings stören mich ein paar Warnungen, denn Warnungen heissen für mich immer, dass etwas nicht zu 100% passt.
Ich bekomme solche in der Richtung:
Use of uninitialized value in string eq (...)
z.B. bei dieser Callbackfunktion:
sub ParseHTMLStart()
{
my ($self, $tagname, $attr, $src) = @_;
if($tagname) # IN DIESER ZEILE TRITT DIE MELDUNG AUF!
(...)
Das ist die Callback Funktion die ich für den HTML::Parser verwende. Offensichtlich ist aus irgendeinem Grund die Variable $tagname nicht gesetzt. Wie kann ich in Perl das überprüfen (in PHP würd ich bei sowas zuerst ein if(isset()) drüberlaufen lassen.
Danke!
Peter
PS: Das gleiche Problem tritt z.B. auch bei LWP::UserAgent auf. Einige schei** Seiten halten sich nicht an den Standard und schreiben solchen Schrott in den Header:
location: /dfgdfg
Diesem ekelhaften Verhalten wollte ich entgegenwirken und hab sowas eingebaut:
if($res->headers->{'location'} ne "")
{
# HOL DIE URL AUF DIE WEITERGELEITET WERDEN SOLL.
}
Offensichtlich kommt da auch dieser Fehler, wenn es im Header keine 'location:' gibt..
Hi,
Use of uninitialized value in string eq (...)
un_initialized_, nicht undeclared.
my ($self, $tagname, $attr, $src) = @_;
Hier deklarierst Du. Steht jedoch in @_ nicht das Richtige, sind die Variablen nicht initialisiert. Nutze or oder ||.
Cheatah
Use of uninitialized value in string eq (...)
z.B. bei dieser Callbackfunktion:
sub ParseHTMLStart()
{
my ($self, $tagname, $attr, $src) = @_;
if($tagname) # IN DIESER ZEILE TRITT DIE MELDUNG AUF!
Also eigentlich sollte hier die Meldung nicht auftauchen (du vergleichst hier ja nicht zwei Strings miteinander.
Laut deiner Meldung machst du:
if($tagname eq '')
Was etwas anderes ist.
if(ausdruck) ist wahr, wenn der ausdruck ungleich null ist kein Leerstring oder ein definierter Wert ist.
Das ist die Callback Funktion die ich für den HTML::Parser verwende. Offensichtlich ist aus irgendeinem Grund die Variable $tagname nicht gesetzt. Wie kann ich in Perl das überprüfen (in PHP würd ich bei sowas zuerst ein if(isset()) drüberlaufen lassen.
Du kannst die Existenz einer Variabel überprüfen
if(defined $var) ...
Aber Achtung:
if(defined $hash->{key})
ist etwas anderes als:
if(exists $hash->{key})
Struppi.