#!/usr/bin/perl -l
my $file = "file.txt";
print "before";
{
print STDERR "fileno before local: ", fileno(STDOUT);
local *STDOUT;
open (STDOUT, '>', $file) or die;
print STDERR "fileno after open: ", fileno(STDOUT);
system("ls");
}
print "after";
####
before
fileno before local: 1
fileno after open: 3
740300.pl
after
####
#!/usr/bin/perl -l
my $file = "file.txt";
print "before";
{
print STDERR "fileno before local: ", fileno(STDOUT);
open (my $old_stdout, '>&', *STDOUT) or die;
close (STDOUT);
open (STDOUT, '>', $file) or die;
print STDERR "fileno after open: ", fileno(STDOUT);
system("ls");
close (STDOUT);
open (STDOUT, '>&', $old_stdout) or die;
}
print "after";
####
$ perl 740300.pl
before
fileno before local: 1
fileno after open: 1
after
$ cat file.txt
740300.pl
####
#!/usr/bin/perl -l
use IPC::Open3 qw( open3 );
my $file = "file.txt";
print "before";
{
open (my $fh, '>', $file) or die;
my $pid = open3('<&STDIN', '>&'.fileno($fh), '>&STDERR', 'ls');
waitpid($pid, 0);
}
print "after";