Thread Argumente/Parameter wo prüfen ? (19 answers)
Opened by der_thomas at 2014-09-15 18:44

rosti
 2014-09-17 12:48
#177339 #177339
User since
2011-03-19
3472 Artikel
BenutzerIn
[Homepage]
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
#!/usr/bin/perl

use strict;
use warnings;
use Carp qw(confess);

# Einfache Instanz der main
my $m = bless{};

# Fehlerbehandlung in der main:
# Script sterben lassen
$m->ziffer() or die $@;


# Ziffer von 0..9
# Fehlerbehandlung in der Methode:
# Exception werfen
sub ziffer{
    my $self = shift;
    my $z = shift;
    return eval{
        confess "Kein Argument übergeben" if ! defined $z;
        confess "Keine Ziffer übergeben" if $z !~ /^\d$/;

        # weitere Anweisungen 
        # dürfen Exceptions werfen, wenn irgendwas nicht passt
        
        # die letzte Anweisung ist ein wahrer Wert (returned)
        1;
    };
}


brief: Carp::croak() und Carp::confess() werfen Excptions, confess() und cluck() muss expliziet angegeben werden, damit es importiert wird; confess() ist verbose zu croak();
Carp::carp() und Carp::cluck() erzeugen Warnungen, cluck() ist verbose zu carp().

Anstatt eine Kontrollstruktur if/else aufzusetzen, wird einfach eine Ex. geworfen, wenn irgendwas nicht passt. Das Werfen der Ex erfolgt in einem eval-Block, die Meldung wird in $@ bekanntgegeben.

$@ wird zur Fehlerbehandlung in der main herangezogen, Beispiel s.o.
Die Prüfung ob gültiges Argument beim Aufruf der Methode erfolgt in der Methode. Die Fehlerbehandlung in der main nimmt einfach nur den Text, der in $@ zu finden ist, wenn die Methode keinen wahren Wert zurückliefert.

Die Methode kann auch beliebig andere Werte zurückliefern und gilt als erfolgreich ausgeführt, solange die letzte Zeile im eval-Block einen Ausdruck hat, der wahr ergibt.
Last edited: 2014-09-17 13:16:47 +0200 (CEST)

View full thread Argumente/Parameter wo prüfen ?