The aforementioned methods will work great if you want to redirect STDERR to a file. However, if you want to redirect it to a file AND still display it on the STDERR device (e.g. the screen) you might try
Filter::Handle. It will let you attach a sub to a file handle (including STDERR) so that you can print the output to a file or filter it any way you like in addition to printing to the terminal. Here's a little snippet to get you started.
use warnings;
use strict;
use Filter::Handle qw/subs/;
open (LOGFILE, ">logfile") || die "could not open logfile";
#filter STDERR through an anonymous sub
Filter \*STDERR, sub {local $_ = "@_"; print LOGFILE "Filtered: $_ ";
+$_};
#prints to both STDERR and to LOGFILE
print STDERR "error!\n";
#STDERR will no longer be filtered through your sub
UnFilter \*STDERR;
close LOGFILE;
Regards,
Rhet