#!/usr/bin/perl use strict; use warnings; use IO::Tee (); my $buf; { open(my $buf_fh, '>', \$buf ) or die "Unable to create a write-to-memory handle: $!\n"); my $tee = IO::Tee->new(\*STDOUT, $buf_fh); my $old_select = select($tee); mysub(); select($old_select); } mysub(); } print "buffer: $buf\n"; sub mysub{ print "mysub output\n"; }