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

bianca
 2016-08-28 07:07
#185308 #185308
User since
2009-09-13
7016 Artikel
BenutzerIn

user image
Danke dir, klappt tatsächlich sehr gut!
Aber ich hatte leider vergessen zu erwähnen, dass der Code in der sub nicht geändert werden darf. eval "exit();" ist somit als Lösung nicht möglich.
Es geht darum, die Funktion einer sub im Rahmen eines kurzen Testscripts zu testen. Und dafür möchte ich den Code in der sub gern genau so belassen, wie er auch später in Benutzung aussehen soll.

Aktueller Code inkl. des vergessenen Aufrufs (Danke, GUIfreund!)
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#!/usr/bin/perl
use strict;
use warnings;
use 5.010;

# wie kann man zeitweise exit() umleiten?
my $sub_code = sub {
    say "bin im sub_code";
    eval "exit();";     # <-- gibt es eine Lösung ohne Änderungen in der sub?
};
say "jetzt soll exit() abgefangen werden";
*CORE::GLOBAL::exit = sub { say "exit() sub"; };    # Quelle: http://stackoverflow.com/a/25376064
$sub_code->();
say "jetzt soll exit() wiederhergestellt werden";
*CORE::GLOBAL::exit = *CORE::exit;  # Quelle: http://stackoverflow.com/a/25376064
$sub_code->();
say "dieser Text darf nicht mehr zu sehen sein";


Quote
jetzt soll exit() abgefangen werden
bin im sub_code
exit() sub
jetzt soll exit() wiederhergestellt werden
bin im sub_code
10 print "Hallo"
20 goto 10

View full thread exit() abfangen