Thread exit() abfangen (12 answers)
Opened by bianca at 2016-08-27 09:02

Raubtier
 2016-08-29 19:03
#185320 #185320
User since
2012-05-04
1076 Artikel
BenutzerIn
[default_avatar]
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!

View full thread exit() abfangen