User since
2009-01-13
87
Artikel
BenutzerIn
Hab grad festgestellt das ich in Modulen bzw. Subroutinen nicht voran komme wenn ich "die" benutze, da dann der rest der routine nicht mehr ausgeführt wird.
Wie kann ich trotzdem eine vernünftige Fehlerüberprüfung machen?
Ich habe ja nur einmal die am Schluss die Möglichkeit den Returnwert mit 0, 1 oder -1 usw. zurück zu geben. Wenn alle programmteile der subroutine sauber durchgelaufen sind soll es einen positiven Return geben, falls eine fehlschlägt soll der Rest trotzdem abgearbeitet werden und eine negativer Returnwert ausgeben.
Oder gibts da andere Praktiken?
Das "die" kannst du durch ein "warn" oder ein "croak" (aus CGI::Carp) ersetzen und das mit dem Rückgabewert erledigst du halt ueber eine Variable, so in der Art wuerde ich das angehen (ungetestet):
package Test;
sub test {
my $return_value = 1;
open(FH, '<', 'test.txt') or error_msg(\$return_value) ; #ja, man soll variablen als FH nehmen
close FH;
return $return_value;
}
sub error_msg {
my $r_value = shift;
$$r_value = 0;
warn $!;
}
1;
User since
2003-08-04
12208
Artikel
Admin1
Gast+2009-02-02 12:06:56--
open(FH, '<', 'test.txt') or error_msg(\$return_value) ; #ja, man soll variablen als FH nehmen
close FH;
und warum tust du es hier nicht?
open my $fh, '<', 'test.txt' or ...;
close $fh;
ist doch jetzt so kein grosser aufwand?