I wrote a program which occassionally calls shell programs which output to STDOUT. I wanted the output from these programs interspersed with the output from my program (which was printing to STDERR). This snippet will do the trick!
# doesnt work ... "&STDOUT" = "&STDERR"; # Assign STDOUT to STDERR *STDOUT = *STDERR; # Open STDERR open STDERR, ">o.txt"; # Print something to STDERR warn "hi"; # run a subprocess which output to STDOUT `pgp -h`; # Print something to STDOUT print "ho!\n"; # Now ole'! it's all in the same file!

Replies are listed 'Best First'.
RE: Intermixing STDOUT and STDERR to a file
by merlyn (Sage) on Sep 29, 2000 at 20:55 UTC
    # run a subprocess which output to STDOUT `pgp -h`;
    Hmm. That's a confusing statement. You've got a void use of backticks (minus 2 for style points), and that's capturing the stdout of the pgp command, then discarding it. So, it's not going to STDOUT at all.

    Perhaps what you mean is that the child process stderr is going to Perl's STDERR, which you've aliased (not dup'ed) to STDOUT. If so, that's not what I would have gotten from the comments. {grin}

    The normally accepted dup'ing of STDOUT to STDERR that doesn't raise the uglies of not working with child processes and symbol table glob mangling is:

    open STDERR, ">&STDOUT";

    -- Randal L. Schwartz, Perl hacker

    A reply falls below the community's threshold of quality. You may see it by logging in.