1#!perl -w 2 3# Check that require doesn't leave the handle it uses open, if it happens that 4# the handle it opens gets file descriptor 0. RT #37033. 5 6chdir 't' if -d 't'; 7require './test.pl'; 8set_up_inc( 'lib' ); 9 10use strict; 11 12sub test_require { 13 my ($state, $want) = @_; 14 delete $INC{'test_use_14937.pm'}; 15 open my $fh, '<', 'README' or die "Can't open README: $!"; 16 my $fileno = fileno $fh; 17 if (defined $want) { 18 is($fileno, $want, 19 "file handle has correct numeric file descriptor $state"); 20 } else { 21 like($fileno, qr/\A\d+\z/, 22 "file handle has a numeric file descriptor $state"); 23 } 24 close $fh or die; 25 26 is($INC{'test_use_14937.pm'}, undef, "test_use_14937 isn't loaded $state"); 27 require test_use_14937; 28 isnt($INC{'test_use_14937.pm'}, undef, "test_use_14937 is loaded $state"); 29 30 open $fh, '<', 'README' or die "Can't open README: $!"; 31 is(fileno $fh, $fileno, 32 "file handle has the same numeric file descriptor $state"); 33 close $fh or die; 34} 35 36is(fileno STDIN, 0, 'STDIN is open on file descriptor 0'); 37test_require('(STDIN open)'); 38 39close STDIN or die "Can't close STDIN: $!"; 40 41is(fileno STDIN, undef, 'STDIN is closed'); 42test_require('(STDIN closed)', 0); 43 44done_testing(); 45