Thread exit() abfangen
(12 answers)
Opened by bianca at 2016-08-27 09:02 2016-08-28T11:50:13 GwenDragon Sehr cool! Danke dir! 2016-08-28T11:50:13 GwenDragon Doch, das macht nichts, ist ja nicht in der sub sondern drumherum, das kann man optisch im Code sauber abgrenzen: Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 #!/usr/bin/perl use strict; use warnings; use 5.010; # wie kann man zeitweise exit() umleiten? my $sub_code = q( ################################################# sub { say "bin im sub_code"; exit(); } ################################################# ;); say "jetzt soll exit() abgefangen werden"; *CORE::GLOBAL::exit = sub { say "exit() sub"; }; # Quelle: http://stackoverflow.com/a/25376064 eval "&{$sub_code}();"; say "jetzt soll exit() wiederhergestellt werden"; *CORE::GLOBAL::exit = *CORE::exit; # Quelle: http://stackoverflow.com/a/25376064 eval "&{$sub_code}();"; say "dieser Text darf nicht mehr zu sehen sein"; 2016-08-28T11:50:13 GwenDragon In dem Fall ist es echt egal, weil das nur zum Testen von sub's ist im Rahmen ihrer "Schöpfung". Und da sind halt verschiedentliche Abgänge mit exit(), deren saubere Funktion ich auch testen möchte. Aber eine wichtige Frage hab ich noch: Wie sieht die Syntax aus, wenn die sub kein String sondern eine sub{} ist und ich der sub Parameter übergeben möchte? Dieser Versuch schlägt fehl mit Fehlermeldung Useless use of a constant ("\n##############################"...) in void context at test_exit.pl line 7. Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 #!/usr/bin/perl use strict; use warnings; use 5.010; # wie kann man zeitweise exit() umleiten? q( ################################################# sub sub_code { say "bin im sub_code mit Par. '$_[0]'"; exit(); } ################################################# ;); say "jetzt soll exit() abgefangen werden"; *CORE::GLOBAL::exit = sub { say "exit() sub"; }; # Quelle: http://stackoverflow.com/a/25376064 eval "&{&sub_code('foo')};"; say "jetzt soll exit() wiederhergestellt werden"; *CORE::GLOBAL::exit = *CORE::exit; # Quelle: http://stackoverflow.com/a/25376064 eval "&{&sub_code('bar')};"; say "dieser Text darf nicht mehr zu sehen sein"; Übrigens: die eigentliche sub darf zur Lösungsfindung auch gern in einer anderen Datei sein, das macht nichts. Nur in der sub selbst möchte ich nichts ändern müssen. 10 print "Hallo"
20 goto 10 |