From: Gurusamy Sarathy Date: Sun, 2 Aug 1998 04:21:48 +0000 (+0000) Subject: ensure implicit close on local(*FH) doesn't affect $! and thence $? X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=df0bd2f4ab5af7b0babaa8c3c84969f29fcac3c7;p=p5sagit%2Fp5-mst-13.2.git ensure implicit close on local(*FH) doesn't affect $! and thence $? p4raw-id: //depot/maint-5.005/perl@1687 --- diff --git a/sv.c b/sv.c index 3652b9d..72007b1 100644 --- a/sv.c +++ b/sv.c @@ -2885,7 +2885,8 @@ sv_clear(register SV *sv) stash = NULL; switch (SvTYPE(sv)) { case SVt_PVIO: - if (IoIFP(sv) != PerlIO_stdin() && + if (IoIFP(sv) && + IoIFP(sv) != PerlIO_stdin() && IoIFP(sv) != PerlIO_stdout() && IoIFP(sv) != PerlIO_stderr()) io_close((IO*)sv); diff --git a/t/op/die_exit.t b/t/op/die_exit.t index b5760d6..ffbb1e0 100755 --- a/t/op/die_exit.t +++ b/t/op/die_exit.t @@ -30,6 +30,8 @@ my %tests = ( 14 => [ 255, 0], 15 => [ 255, 1], 16 => [ 255, 256], + # see if implicit close preserves $? + 17 => [ 42, 42, '{ local *F; open F, q[TEST]; close F } die;'], ); my $max = keys %tests; @@ -37,11 +39,12 @@ my $max = keys %tests; print "1..$max\n"; foreach my $test (1 .. $max) { - my($bang, $query) = @{$tests{$test}}; + my($bang, $query, $code) = @{$tests{$test}}; + $code ||= 'die;'; my $exit = ($^O eq 'MSWin32' - ? system qq($perl -e "\$! = $bang; \$? = $query; die;" 2> nul) - : system qq($perl -e '\$! = $bang; \$? = $query; die;' 2> /dev/null)); + ? system qq($perl -e "\$! = $bang; \$? = $query; $code" 2> nul) + : system qq($perl -e '\$! = $bang; \$? = $query; $code' 2> /dev/null)); printf "# 0x%04x 0x%04x 0x%04x\nnot ", $exit, $bang, $query unless $exit == (($bang || ($query >> 8) || 255) << 8);