Beefy Boxes and Bandwidth Generously Provided by pair Networks
"be consistent"

How to restore from redirecting STDOUT to variable?

by anaconda_wly (Scribe)
on Jan 17, 2013 at 02:36 UTC ( #1013683=perlquestion: print w/replies, xml ) Need Help??
anaconda_wly has asked for the wisdom of the Perl Monks concerning the following question:

I use code below directing output to $output, and I can't see screen display any more. How can I restore from it to a normal state which will print to the screen? I tried close STDOUT but no effect.

close STDOUT; my $output = ""; open(STDOUT, ">", \$output) or die "Can't open STDOUT: $!"; print "test \n";
close STDOUT;//no effect


Replies are listed 'Best First'.
Re: How to restore from redirecting STDOUT to variable?
by choroba (Chancellor) on Jan 17, 2013 at 02:45 UTC
    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;
    لսႽ ᥲᥒ⚪⟊Ⴙᘓᖇ Ꮅᘓᖇ⎱ Ⴙᥲ𝇋ƙᘓᖇ
      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.

Re: How to restore from redirecting STDOUT to variable?
by Anonymous Monk on Jan 17, 2013 at 03:07 UTC

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: perlquestion [id://1013683]
Approved by choroba
[shmem]: some experience with vim?
[Lady_Aleena]: None
[shmem]: I don't know geany, and don't know whether it has support for ctags.
[Lady_Aleena]: ctags?
[shmem]: ctags is a program which (recursively) extracts the symbols from source and stores them in a one-file database. This allows you to query the locations where these symbols (e.g. a subroutine name) are used anywhere in the source code tree...
[shmem]: ...from inside the editor.
[shmem]: apt-get install exuberant-ctags
[Lady_Aleena]: I think I heard vim has a big learning curve.
[shmem]: then in the root of your source tree run: ctags -R
[shmem]: you get a file named tags where all symbols and the places where they are used are listed

How do I use this? | Other CB clients
Other Users?
Others examining the Monastery: (9)
As of 2017-04-27 12:09 GMT
Find Nodes?
    Voting Booth?
    I'm a fool:

    Results (505 votes). Check out past polls.