in reply to Re^2: Need Help: Capture Print Outputs from a Function
in thread Need Help: Capture Print Outputs from a Function

I prefer

{ open local *STDOUT, '>', \$buf; ... }
over
open TEMP, '>', \$buf; my $old_select = select(TEMP); ... select($old_select);

since the former restores STDOUT even in the case of exceptions. The former, however, doesn't work if someone has previously called select. I guess the comprehensive solution would be:

{ my $old_select = select(); my $handle = on_release { select($old_select); }; open local *STDOUT, '>', \$buf; select(STDOUT); ... }

It even handles exceptions thrown by signal handlers.

Updated.

Replies are listed 'Best First'.
Re^4: Need Help: Capture Print Outputs from a Function
by BrowserUk (Patriarch) on May 03, 2006 at 08:30 UTC
    my $handle = on_release { select($old_select); };

    What is on_release?


    Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
    Lingua non convalesco, consenesco et abolesco. -- Rule 1 has a caveat! -- Who broke the cabal?
    "Science is about questioning the status quo. Questioning authority".
    In the absence of evidence, opinion is indistinguishable from prejudice.