#!/usr/bin/perl -wl $| = 1; # unbuffered output print $$; for(1,2){ open SAVEOUT,">&STDOUT"; my $pid = open STDOUT,"| tee log_$_"; open STDERR, ">&STDOUT"; print "this goes to STDOUT (log_$_)"; warn "This goes to STDERR (log_$_)"; sleep 1; print "killing $pid"; kill 15, $pid; close STDOUT; close STDERR; open STDOUT,">&SAVEOUT"; } __END__ Name "main::SAVEOUT" used only once: possible typo at tee.pl line 4. 14781 this goes to STDOUT (log_1) This goes to STDERR (log_1) at tee.pl line 8. killing 14782 this goes to STDOUT (log_2) This goes to STDERR (log_2) at tee.pl line 8. #### $ cat log_1 log_2 this goes to STDOUT (log_1) This goes to STDERR (log_1) at tee.pl line 8. this goes to STDOUT (log_2) This goes to STDERR (log_2) at tee.pl line 8.