Thread "Exception handling" Frage (10 answers)
Opened by Kuerbis at 2012-06-17 08:41

topeg
 2012-06-17 09:36
#159072 #159072
User since
2006-07-10
2611 Artikel
BenutzerIn

user image
Code (perl): (dl )
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;
}


Wenn du erklärst was schief läuft ist das in Ordnung. In der Doku sollte nur beschrieben sein dass du croak benutzt. Und du solltest dabei konsequent sein.
Wenn eine Funktion auch ohne eine Option läuft, du es aber für wichtig hältst das sie genutzt wird, dann ist ein carp angebracht.

Du kannst auch Fehlercodes Zurück liefern. Das ist Günstig wenn eine Aktion wiederholt werden kann. Das gilt z.B für Interaktionen mit dem System, anderen Programmen, Servern oder Nutzern.

  • Fehlercode bei wiederholbaren Aktionen
  • carp bei "behebbaren" Fehlern
  • croak bei Fehlern der Handhabung

View full thread "Exception handling" Frage