1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
use Carp; sub function { my ( $arrayref, $hashref ) = @_; croak if not defined $arrayref; croak if $arrayref ist keine Array-Referenz if ( defined $hashref ) { croak if $hashref ist keine Hash-Referenz # test keys und values croak if ungültige keys oder values; } ... ... return Auswahl aus $arrayref; }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
use Carp; my %allowed_keys; my %allowed_values; sub function { my ( $arrayref, $hashref ) = @_; croak 'First Argument has to be an Arrayref' if !defined $arrayref or ref $arrayref ne 'ARRAY'; my %hash=( ... ); # vordefiniert if ( defined $hashref ) { croak 'Second Argument has to be an Hashref' if ref $hashref ne 'HASH' # test keys und values my @not_allowed_keys=grep{ !$allowed_keys{$_} }keys(%$hashref); my @not_allowed_vals=grep{ !$allowed_values{$_} }values(%$hashref); carp 'Ignoring Keys :'.join( ', ', @not_allowed_keys ) if @not_allowed_keys; carp 'Ignoring Values :'.join( ', ', @not_allowed_vals ) if @not_allowed_values; %hash=map { $_ => $hashref->{$_} } grep{ $allowed_values{ $hashref->{$_} } } grep{ $allowed_keys{$_} } keys %$hashref ; } my @return; ... ... return @return; }
2012-06-17T07:57:36 KuerbisThx! Fehlercode zurückgeben geht nicht gut, weil @return bereits jeden Wert enthalten könnte.
2012-06-17T07:57:36 KuerbisWie könnte man die Verwendung von croak in der Doku beschreiben?
2012-06-17T09:01:15 topegDu könntest ja auch return \@return,$error; oder return $error,@return; schreiben. Das ist nur eine Sache der Definition.
2012-06-21T17:11:00 topegWiederholbare Aktionen, z.B. das Abrufen einer Webseite, sollten kein croak oder carp machen. Da ist ein Fehlerwert als Rückgabe angebrachter.
[...]
2012-06-17T06:41:52 KuerbisHallo,
ist es bei einer solchen Funktion, in der in einem zweiten, optionalen Argument Optionen als Hash-Referenz übergeben werden, zu brutal, wenn bei ungültigen Optionen bzw. ungültigen Optionswerten ein croak aufgerufen wird?
Code (perl): (dl )1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17use Carp; sub function { my ( $arrayref, $hashref ) = @_; croak if not defined $arrayref; croak if $arrayref ist keine Array-Referenz if ( defined $hashref ) { croak if $hashref ist keine Hash-Referenz # test keys und values croak if ungültige keys oder values; } ... ... return Auswahl aus $arrayref; }
1 2 3 4 5 6 7
my $returnValue = eval{ function(@argumente) }; # frage $@ ab, ob es eine Exception gab # croak liefert eine Exception ... at zeigt auf die Zeile, in # welcher die Funktion aufgerufen wird. # Btw., croak "sollte auch aussagen, was nicht stimmt";
2012-06-17T08:47:55 KuerbisWie würde man auf englisch schreiben, dass eine Funktion croakt?