I have a slight quibble with this (and because I wrote
Filter::Handle :).
A post that tells you how to tie a filehandle (or how to
use Filter::Handle, or points you towards the existence
of Filter::Handle, etc.) actually *should* help you to store
prints to STDERR into an array. Try this:
use Filter::Handle qw/subs/;
my @errors;
Filter \*STDERR, sub {
push @errors, "@_";
()
};
print STDERR "bar";
print STDERR "foo";
UnFilter \*STDERR;
@errors now holds two elements: "bar" and "foo".
If you read the Filter::Handle docs you'll find an example
very much like this, under the head "Capturing Output".
Note that this doesn't work for XS code, and it doesn't
catch errors written by warn. So in that sense using
$SIG{__WARN__} or working with DBI to get the errors
back the way you want them is the right way to go.
*However*, it's a useful technique to use, at times. |