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

That's a lot of work to avoid using select.

  • Comment on Re^2: Need Help: Capture Print Outputs from a Function

Replies are listed 'Best First'.
Re^3: Need Help: Capture Print Outputs from a Function
by BrowserUk (Patriarch) on May 02, 2006 at 20:55 UTC

    True, but it is guarenteed to work even if someone uses print STDOUT stuff;, when select won't.

    The case of that where I got bitten is when you pass \*STDOUT to some module and internally it uses

    printf { $self->{fh} } "%s\n", 'stuff';

    Which is not a completely uncommon scenario.


    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.
      Good point! Maybe I'll start using argless select instead of *STDOUT.
Re^3: Need Help: Capture Print Outputs from a Function
by ikegami (Patriarch) on May 02, 2006 at 21:32 UTC

    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.

      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.