PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Perl Rückgabewerte



neo2k
05-02-2007, 10:46
Hallo,

ich habe in Perl eine Funktion (sub) geschrieben, weilche ein Array zurückgibt. Nun möchte ich dem Aufrufer mitteilen, ob in der sub ein Fehler aufgetreten ist. Wie macht man das ?

1) Ich habe es mit return undef versucht (Im Fehlerfall). Aber das klappt nicht.
sub a() { return undef; }
if (!defined(a()) { echo "Fehler"; }
Fehler wird nie ausgegeben.
Ausserdem kann ich bei dieser Version dem Aufrufer keinen Fehlerstring mitgeben.

2) Kann man $! und $? selbst setzen ?

3) croak und carp setzen $! und $? auch nicht, sondern geben nur Fehler aus oder brechen ab.

Kann mir jemand einen Tip geben?
Vielen Dank
Torsten

Molaf
06-02-2007, 22:06
Mit dem if prüfst Du in der Form aber nur, ob eine Refferenz auf einen Subroutine existiert, die sub also definiert wurde.

Wenn das Zurückgeben einer leeren Liste schon das Zeichen für einen Fehler ist, dann reicht doch:

my @liste=a();
if (@liste) {print "Fehler\n";}

Ansonsten kannst Du ka auch einen extra String vor der Liste zurückgeben, und dort den Fehler eintragen, wenn es einen gab.

sub a
{
my $a,@liste;
...
return $a,@liste;
}

my ($fehler,@liste)=a();
if ($fehler) {print "Fehler:$fehler\n";}

Hat das helfen können?

neo2k
07-02-2007, 00:25
Ja super, danke.

Ich habe die Version mit 2 Rückgabewerten gewählt. Funktioniert super. Ob es perl-like ist weiss ich aber nicht, aber das ist egal :)

Dankesehr
Torsten