in reply to redirecting STDERR from shell commands

I believe you can simply close and re-open STDERR like so:

close(STDERR); open(STDERR,">mylogfile.log"); print STDERR 'this goes to my log file now';
HTH

Replies are listed 'Best First'.
Some things I would have never guessed...
by Rhose (Priest) on Sep 07, 2001 at 17:04 UTC
    I was pretty sure what AidanLee posted above would work correctly, and I would suggest redirecting STDERR as busunsl posted below -- 2>$FILE. What I did *not* know would work was the following code:

    Please forgive me, but I only had access to a Windows 2000 PC. *Smiles*

    use strict; system("del doesnotexist1"); close(STDERR); open(STDERR,">stderr.out") || die "Could not open STDERR...\n"; system("del doesnotexist2");

    This results in "Could Not Find C:\TEMP\doesnotexist1" being displayed on the screen (default for STDERR) and "Could Not Find C:\TEMP\doesnotexist2" being written to stderr.out.

    Looks like system() inherits STDERR from the Perl script.

      system() forks, so just like any other forked child process, it inherits any IO handle definitions from the parent process. just fyi.