#!/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";