TorstenA: Probleme beim Überprüfen einer Grafik

Beitrag lesen

Hallo Markus,

Matti hat dir ja schon eine mögliche Lösung gesagt, allerdings bist du meines Wissens hinsichtlich dem "undef" einem kleinen Denkfehler aufgesessen.

my ($x, $y) = imgsize('Party.jpg');

Erste Frage: warum nutzt du hier nicht auch die in Image::Size eingebaute Meldung:
http://search.cpan.org/~rjray/Image-Size-2.992/Size.pm#DIAGNOSTICS

also: my ($x, $y, $msg) = imgsize('Party.jpg');

Weiterhin hat bei Misserfolg die erste Variable ($x) _immer_ den Wert "undef".

($x || $y) eq undef ? print "Undefiniert" : print "$x x $y\n";
Habe ich allerdings eine Grafik, die keine ist, bekomme ich folgende Meldung:
Use of undef without parens is ambiguous....

Siehe: http://www.perldoc.com/perl5.8.0/pod/perldiag.html#Warning--Use-of--%25s--without-parentheses-is-ambiguous

Schreibe ich '' statt undef bekomme ich: Use of uninitialized value in string line 8.

Logisch. Im Misserfolgsfall ist $x nicht definiert (uninitialized), was eine Warnung auslöst, sobald du sie mit '' vergleichst. "undef" heißt, dass eine Variable zwar existiert, ihr aber kein Inhalt irgendeines Typs zugewiesen wurde. Wenn du eine solche Variable mit dem Leerstring '' vergleichst, unterstellst du ihr die Initialisierung als String. Da die Variable aber "undef" ist, wird die Warnung ausgelöst. Siehe auch:
http://www.perldoc.com/perl5.8.0/pod/perldiag.html#Use-of-uninitialized-value%25s

"undef" ist _kein_ String, sondern eben undef. Ob das so ist, prüfst du am sinnigsten mit der Funktion defined.

P.S Er schreibt mir zwar die Ausgabe "Undefiniert" zusätzlich zur Fehlermeldung hin, aber ich will, dass es ohne Fehlermeldung funktioniert.

Versuche es so:

if( defined $x) {
  print "In Ordnung";
}
else {
  print "Fehler: $msg";
}

Oder Shorthand, scheint ja modern zu sein, mal sehen, ob ich's richtig hinkriege ;-))

(defined $x) ? print "$x x $y" : print "Fehler beim Lesen: $msg";

Nur zur Ergänzung
Torsten