http://qs321.pair.com?node_id=313886


in reply to Open pipe to a function?

If you are going to pipe it to a script, then I believe it has to be in another script.

If all you need to do is write STDERR to a file, why not just do this at the beginning of your script:
open(STDERR, '>error.txt');
Update:Try using IO::Tee, like suggested by Roy Johnson. I included a sample in my reply to you below.

- Tom

Replies are listed 'Best First'.
Re: Re: Open pipe to a function?
by Sprad (Hermit) on Dec 10, 2003 at 21:44 UTC
    I can't just redirect it, because I also want to see it at runtime.

    ---
    A fair fight is a sign of poor planning.

      You could probably do some tricks with IO::Multiplex. Just save the orginal filehandle like this:

      my $old_stderr = *STDERR;

      And then reopen STDERR with IO::Multiplex with $old_stderr and a filehandle to the log file.

      ----
      I wanted to explore how Perl's closures can be manipulated, and ended up creating an object system by accident.
      -- Schemer

      : () { :|:& };:

      Note: All code is untested, unless otherwise stated

      How about
      use IO::Tee; open(ERRLOG, '>error.txt'); my $tee = new IO::Tee(\*STDOUT, \*ERRLOG); *STDERR = $tee;

      - Tom