15 open(DUPOUT,">&STDOUT");
16 open(DUPERR,">&STDERR");
18 open(STDOUT,">Io.dup") || die "Can't open stdout";
19 open(STDERR,">&STDOUT") || die "Can't open stderr";
21 select(STDERR); $| = 1;
22 select(STDOUT); $| = 1;
24 print STDOUT "ok 2\n";
25 print STDERR "ok 3\n";
27 # Since some systems don't have echo, we use Perl.
28 $echo = qq{$^X -le "print q(ok %d)"};
30 $cmd = sprintf $echo, 4;
33 $cmd = sprintf "$echo 1>&2", 5;
34 $cmd = sprintf $echo, 5 if $^O eq 'MacOS'; # don't know if we can do this ...
37 # KNOWN BUG system() does not honor STDOUT redirections on VMS.
39 print "not ok $_ # TODO system() not honoring STDOUT redirect on VMS\n"
43 system sprintf $echo, 6;
45 system sprintf $echo, 7;
48 system sprintf "$echo 1>&2", 7;
52 close(STDOUT) or die "Could not close: $!";
53 close(STDERR) or die "Could not close: $!";
55 open(STDOUT,">&DUPOUT") or die "Could not open: $!";
56 open(STDERR,">&DUPERR") or die "Could not open: $!";
58 if (($^O eq 'MSWin32') || ($^O eq 'NetWare') || ($^O eq 'VMS')) { print `type Io.dup` }
59 elsif ($^O eq 'MacOS') { system 'catenate Io.dup' }
60 else { system 'cat Io.dup' }
63 print STDOUT "ok 8\n";
65 open(F,">&",1) or die "Cannot dup to numeric 1: $!";
69 open(F,">&",'1') or die "Cannot dup to string '1': $!";
73 open(F,">&=",1) or die "Cannot dup to numeric 1: $!";
77 if ($Config{useperlio}) {
78 open(F,">&=",'1') or die "Cannot dup to string '1': $!";
82 open(F, ">&DUPOUT") or die "Cannot dup stdout back: $!";
90 skip("need perlio", 13) unless $Config{useperlio};
92 ok(open(F, ">&", STDOUT));
93 isnt(fileno(F), fileno(STDOUT));
96 ok(open(F, "<&=STDIN"));
97 is(fileno(F), fileno(STDIN));
100 ok(open(F, ">&=STDOUT"));
101 is(fileno(F), fileno(STDOUT));
104 ok(open(F, ">&=STDERR"));
105 is(fileno(F), fileno(STDERR));
108 open(G, ">dup$$") or die;
111 ok(open(F, ">&=$g"));
121 close G; # flush first
122 close F; # flush second
124 open(G, "<dup$$") or die;
125 { local $/; is(<G>, "ggg\nfff\n") }
128 END { 1 while unlink "dup$$" }