# This \$var syntax of open() requires Perl 5.8.0 or higher. use 5.8.0; my $input = "test\nfoo\nbar\n"; open(my $old_stdin, "<&STDIN") or die("Can't dup STDIN: $!.\n"); close(STDIN); open(STDIN, '<', \$input) or die("Can't open string for reading\n"); my $output = ""; open(my $old_stdout, ">&STDOUT") or die("Can't dup STDOUT: $!.\n"); close(STDOUT); open(STDOUT, '>', \$output) or die("Can't open string for writing\n"); print($_) while (); print $old_stdout ("\$output contains:\n$output"); __END__ output ====== $output contains: test foo bar