in reply to Re: stronger than eval?
in thread stronger than eval?

This works great except STDERR gets printed to the console and $@ just gets STDOUT. Any way to fix that? Just so the user gets clean output...

andyford
or non-Perl: Andy Ford

Replies are listed 'Best First'.
Re^3: stronger than eval?
by ysth (Canon) on Sep 21, 2006 at 19:51 UTC
    That's not quite right; $@ will get the exception (aka "die" message). Anything directly written out to STDERR or STDOUT will not be caught, unless you tie those filehandles (only works for output by perl) or reopen them. If the output is due to a warn, you can catch it with a $SIG{__WARN__} handler.
      Oh OK right I see. Part of my error is the shell, and part is perl.

      Lifted this from the open docs.

      open OLDERR,">&",\*STDERR or die "Can't dup STDERR: $!"; open STDERR,'>>',"foo.out" or die "Can't redirect STDERR: $!"; eval 'use Cache::File'; open STDERR, ">&OLDERR" or die "Can't dup OLDERR: $!";
      but I get a
      Name "main::OLDERR" used only once: possible typo...
      Is there another way to express the last open, or do I have to do the local "no warnings" thing that I read about a couple times many years ago?

      andyford
      or non-Perl: Andy Ford

        open my $tmp,">&",\*STDERR or die "Can't dup STDERR: $!\n";