Thread exit() abfangen
(12 answers)
Opened by bianca at 2016-08-27 09:02
Hallo Bianca,
ich hätte noch eine andere Lösung für dich und zwar mit einem zusätzlichen Modul, ich habs mal "ExitIgnorer" genannt: ExitIgnorer.pm: Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 package ExitIgnorer; use 5.10.0; use Exporter qw(import); @EXPORT = qw(ignore_exit_calls restore_exit_calls); our $ignoreExit = 0; *CORE::GLOBAL::exit = sub { if ($ignoreExit) { say "exit(", join(",", map "'$_'", @_), ") sub "; } else { CORE::exit(@_); } }; sub ignore_exit_calls { $ignoreExit = 1; } sub restore_exit_calls { $ignoreExit = 0; } 1; und im eigentlichen Code musst du dann (wichtig!) ExitIgnorer vor allen anderen Modulen laden, die exit aufrufen: Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 #!/usr/bin/perl use ExitIgnorer; use strict; use warnings; use 5.010; # wie kann man zeitweise exit() umleiten? my $sub_code = sub { say "bin im sub_code"; exit(); }; say "jetzt soll exit() abgefangen werden"; ignore_exit_calls(); $sub_code->(); say "jetzt soll exit() wiederhergestellt werden"; restore_exit_calls(); exit(); say "dieser Text darf nicht mehr zu sehen sein"; Im Prinzip ist das exit also immer auf deine eigene Funktion umgebogen und du stellst mit den beiden Funktionen an oder aus, dass exit aufgerufen werden soll. Groetjes aus dem Urlaub! |