Beefy Boxes and Bandwidth Generously Provided by pair Networks
Pathologically Eclectic Rubbish Lister
 
PerlMonks  

Re: How to restore from redirecting STDOUT to variable?

by choroba (Cardinal)
on Jan 17, 2013 at 02:45 UTC ( [id://1013686]=note: print w/replies, xml ) Need Help??


in reply to How to restore from redirecting STDOUT to variable?

Read open. The examples are there:
#!/usr/bin/perl use warnings; use strict; open my $save_out, '>&', \*STDOUT or die "Can't dup STDOUT: $!"; close STDOUT; my $output; open STDOUT, '>', \$output or die "Can't open STDOUT: $!"; print "test \n"; close STDOUT; open STDOUT, '>&', $save_out or die "Can't restore STDOUT: $!"; print "Back\n"; print $output;
لսႽ† ᥲᥒ⚪⟊Ⴙᘓᖇ Ꮅᘓᖇ⎱ Ⴙᥲ𝇋ƙᘓᖇ

Replies are listed 'Best First'.
Re^2: How to restore from redirecting STDOUT to variable?
by anaconda_wly (Scribe) on Jan 17, 2013 at 03:34 UTC
    Thanks! What's exactly the "&" means after ">"?

      That you want the file descriptor dup()ed, i.e. get a new file descriptor that refers to the same output stream as STDERR and a Perl-level file handle layered on top of that.

      As the open() perldoc also explains, this is even better written with an '=' after the ampersand:

      open my $save_out, '>&=', \*STDOUT or die "Can't fdopen STDOUT: $!"; open STDOUT, '>&=', $save_out or die "Can't restore STDOUT: $!";
      This avoids creating an all new file descriptor but reuses the system's for a new Perl file handle.

        Great! Thank all!

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://1013686]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others avoiding work at the Monastery: (4)
As of 2024-04-25 09:47 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found