1#!./perl -- # Perl Rules 2 3BEGIN { 4 if ($^O eq 'VMS') { 5 print "1..0 # Skip: needs porting, perhaps imitating Win32 mechanisms\n"; 6 exit 0; 7 } 8 require "../../t/test.pl"; 9} 10use strict; 11use warnings; 12 13plan 3; 14 15 my $file = 't/fd.t'; 16 17# [perl #76474] 18{ 19 my $stderr = runperl( 20 switches => ['-MIPC::Open3', '-w'], 21 prog => "open STDIN, q _${file}_ or die \$!; open3(q _<&0_, my \$out, undef, \$ENV{PERLEXE}, q _-e0_)", 22 stderr => 1, 23 ); 24 25 is $stderr, '', 26 "dup STDOUT in a child process by using its file descriptor"; 27} 28 29{ 30 my $want = qr{\A#!\./perl -- # Perl Rules\r?\z}; 31 open my $fh, '<', $file or die "Can't open $file: $!"; 32 my $have = <$fh>; 33 chomp $have; 34 like($have, $want, 'We can find our test string'); 35 close $fh; 36 37 fresh_perl_like(<<"EOP", 38use IPC::Open3; 39open FOO, '<', '$file' or die \$!; 40open3('<&' . fileno FOO, my \$out, undef, \$ENV{PERLEXE}, '-eprint scalar <STDIN>'); 41print <\$out>; 42EOP 43 $want, 44 undef, 45 'Numeric file handles are duplicated correctly' 46 ); 47} 48