#!/usr/bin/perl use warnings; use strict; SendMemberMail(); print "stdout 2\n"; sub SendMemberMail { open my $fh, '>', '1.log' or die $!; MAIL: { local *STDOUT = $fh; local *STDERR = $fh; print "stdout 1\n"; warn "stderr 1\n"; # equivalent Mail:Sendmail code open S,'>','socket' or die; my $oldfh = select(S); $| = 1; select($oldfh); close S; } close $fh; # select(STDOUT); # uncomment to fix }