Thread Hat Perl events?
(12 answers)
Opened by bianca at 2021-10-27 09:35
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 perlfunc eval und perlfunc die sowie mit vielen CPAN-Modulen, die das ganze weniger fehleranfällig machen, der aktuelle Favorit ist 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 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. |