Beefy Boxes and Bandwidth Generously Provided by pair Networks
No such thing as a small change
 
PerlMonks  

Re: DESTROY handler changes child exit status? (feature $?)

by Anonymous Monk
on May 09, 2013 at 07:21 UTC ( [id://1032737]=note: print w/replies, xml ) Need Help??


in reply to DESTROY handler changes child exit status?

https://rt.perl.org/rt3//Public/Search/Simple.html?q=DESTROY+Exit -> #30331: system/fork in DESTROY overrides exit code of parent program

Says its a feature, see perlvar#$?

Use  local $?; system ... in DESTROY to overcome it

Replies are listed 'Best First'.
Re^2: DESTROY handler changes child exit status? (feature $? and win32 bug)
by Anonymous Monk on May 09, 2013 at 07:36 UTC
    Ha, I'm on win32, using  local $?; reveals a bug in the fork emulation, the effect is opposite of what it should be, using local $? should not cause $? to be used for exit value (which should be the default behavior)
    package Foo; use strict; use warnings; sub new { bless {}, shift; } sub DESTROY { warn "$$: destroy"; local $? if @ARGV; system("waaaah"); } package main; use strict; use warnings; use POSIX ":sys_wait_h"; my $foo = Foo->new(); my $pid = fork(); die "fork failed" if !defined $pid; if( $pid ) { # parent print "$$: parent\n"; } else { # child print "$$: child\n"; # system("waaaah"); exit 5; } my $reaped = waitpid($pid, 0); print "reaped( $reaped) \$?( $? ) >> 8 ( @{[ $? >> 8 ]} )\n"; #~ my $child_exit_status = POSIX::WEXITSTATUS($?); #~ print "pid=$reaped status: $child_exit_status\n"; __END__ $ perl fudge 2060: parent -3360: child -3360: destroy at fudge line 8. 'waaaah' is not recognized as an internal or external command, operable program or batch file. reaped( -3360) $?( 0 ) >> 8 ( 0 ) 2060: destroy at fudge line 8. 'waaaah' is not recognized as an internal or external command, operable program or batch file. $ perl fudge local 1628: parent -3804: child -3804: destroy at fudge line 8. 'waaaah' is not recognized as an internal or external command, operable program or batch file. reaped( -3804) $?( 1280 ) >> 8 ( 5 ) 1628: destroy at fudge line 8. 'waaaah' is not recognized as an internal or external command, operable program or batch file.

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://1032737]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others chilling in the Monastery: (7)
As of 2024-04-24 10:49 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found