For Programmers: Free Programming Magazines  


Home > Archive > PERL Programming > December 2005 > perl output capturing









You are viewing an archived Text-only version of the thread. To view this thread in it's original format and/or if you want to reply to this thread please [click here]

 

Author perl output capturing
m3p

2005-12-13, 2:34 pm

Try this amazing little Perl sniplet:


#=====================
open my $oldout, ">&STDOUT" or die "Can't dup STDOUT: $!";
open OLDERR, ">&", \*STDERR or die "Can't dup STDERR: $!";

close STDOUT;
open STDOUT, '>', \$str or die "Can't redirect STDOUT: $!";
close STDERR;
open STDERR, ">&STDOUT" or die "Can't dup STDOUT: $!";

select STDERR; $| = 1; # make unbuffered
select STDOUT; $| = 1; # make unbuffered

# print STDOUT "stdout 1\n"; # this works for
# print STDERR "stderr 1\n"; # subprocesses too


tst();


open STDOUT, ">&", $oldout or die "Can't dup \$oldout: $!";
open STDERR, ">&OLDERR" or die "Can't dup OLDERR: $!";


print '$str=' . $str;


print STDOUT "stdout 2\n";
print STDERR "stderr 2\n";

1;

sub tst() {
print 'in tst' . "\n";
}
#==========================

The call to "tst()" could be any subroutine or package call and the result is that whatever would have been returned to the browser (because it was "print"ed), gets stored in $str.
Sponsored Links







Also available: Server administration forum archive | Web Design forum archive | Software forum archive | Hardware reviews archive

Copyright 2008 codecomments.com