#!/usr/bin/perl use warnings; use strict; sub writes_to_stdout { print "some information\n"; } sub captured { local *STDOUT; my $result; open STDOUT, '>', \$result; writes_to_stdout(); return $result; } my $val = captured(); print "No output yet\n"; print "But now: $val"; ## and this is what it writes: $ perl foo.pl No output yet But now: some information