Thread Hat Perl events? (12 answers)
Opened by bianca at 2021-10-27 09:35

haj
 2021-11-13 11:01
#194062 #194062
User since
2015-01-07
555 Artikel
BenutzerIn

user image
Das Szenario, das Du hier beschreibst, ist ziemlich genau das, wofür die "Exceptions" gedacht sind. Die gibt's in Perl eingebaut mit dem Funktionspaar Perldoc:perlfunc eval und Perldoc:perlfunc die sowie mit vielen CPAN-Modulen, die das ganze weniger fehleranfällig machen, der aktuelle Favorit ist CPAN:Try::Tiny, oder ab Perl 5.34 das "eingebaute" try/catch.

Am besten zeige ich das am Beispiel mit Deinem Code:
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 5.010;

use autodie; # Perl core Modul
use Try::Tiny;

my $test = unterprog();
say "Erg.: ".(defined $test ? $test : '');

sub unterprog {
    try {
        # Nun kann man auch selbst Fehlerereignisse auslösen:
        $ARGV[0]  or  die "Nur wahre Argumente, bitte!";
        # hier folgt jetzt viel Code
        # und bei jedem Kommando kann es zu Fehlern kommen
        # und immer wenn das passiert soll quasi ein return
        # ausgeführt werden
        # z. B.:
        unlink('diese_datei_gibt_es_aber_nicht');
        # bitte nicht auf das Beispiel antworten,
        # das ist wie vesagt nur ein BEISPIEL
    }

    # hier möchte ich eine Art Handler platzieren:
    catch {
        # hier passiert noch mehr
        return $_;
    };
}


Hier habe ich außerdem das Core-Modul Perldoc:autodie verwendet. Das ändert das Verhalten von Systemschnittstellen (also denen, die im Fehlerfall undef zurückgeben und den Fehler in $! liefern) so, dass statt dessen das ein Fehlerereignis ausgelöst wird. Deswegen habe ich noch ein Beispiel hinzugefügt, wie das aussieht, wenn Du selbst einen Fehler auslösen willst. Wenn Du das Programm ohne Argumente (oder mit einer Null als Argument) aufrufst, dann schlägt das die zu.

View full thread Hat Perl events?