-T _ and -B _ always do another stat() on the previous file handle or
filename, unless it is a handle that has been closed.
Normally, the internal stat buffer, status, etc., are reset even for
_. This happens even on a failed fstat().
-T HANDLE and -B HANDLE currently *do* reset the stat status
(PL_laststatval) if there is no IO thingy, so having -T _ and -B _ not
do that makes things needlessly inconsistent.
}
else {
PL_statgv = gv;
- PL_laststatval = -1;
sv_setpvs(PL_statname, "");
io = GvIO(PL_statgv);
}
+ PL_laststatval = -1;
if (io && IoIFP(io)) {
if (! PerlIO_has_base(IoIFP(io)))
DIE(aTHX_ "-T and -B not implemented on filehandles");
}
use Config;
-plan(tests => 42 + 27*14);
+plan(tests => 43 + 27*14);
ok( -d 'op' );
ok( -f 'TEST' );
my $Perl = which_perl();
SKIP: {
- skip "no -T on filehandles", 5 unless eval { -T STDERR; 1 };
+ skip "no -T on filehandles", 6 unless eval { -T STDERR; 1 };
# Test that -T HANDLE sets the last stat type
-l "perl.c"; # last stat type is now lstat
# and after -r $ioref
-r *$fh{IO};
ok -T _, '-T _ works after -r $ioref';
+
+ # -T _ on closed filehandle should still reset stat info
+ stat $fh;
+ close $fh;
+ -T _;
+ ok !stat _, '-T _ on closed filehandle resets stat info';
}
is runperl(prog => '-T _', switches => ['-w'], stderr => 1), "",