I am writing some tests using Test::More
, and one of the functions I'm testing prints to STDERR
. I'd like to test the output to STDERR
, but am a little unsure how to do this. I know I'm close. This works:
use strict;
use warnings;
use feature qw(say);
close STDERR;
open STDERR, ">", \my $error_string;
say STDERR "This is my message";
say qq(The \$error_string is equal to "$error_string");
This prints out:
The $error_string is equal to "This is my message
"
However, I don't want to close STDERR. I merely want to dup it.
I've tried this:
use strict;
use warnings;
use feature qw(say);
open my $error_fh, ">", my $error_string;
open STDERR, ">&", $error_fh;
say STDERR "This is my message";
close $error_fh;
say qq(The \$error_string is equal to "$error_string");
But, $error_string
is blank.
What am I doing wrong?
use autodie;
turned on. When I do add it, I getCan't open 'GLOB(0x7fcb82829808)' with mode '>&': 'Bad file descriptor' at ./test.pl line 11
. Localizing STDERR should do the trick. – Fideliafidelio