1 2 3 4 5 6 7 8 9 10 11
#!/usr/bin/perl use strict; use warnings; use IO::String; my $io=tie( *STDOUT, 'IO::String' ); print "test\n"; print "LINE $_\n" for(0..9); my $txt=$io->string_ref(); warn $$txt;
1 2 3 4 5 6 7
open my $fh, '>', \my $buf or die $!; select $fh; print "hallo "; print "welt"; warn "<<$buf>>";
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
#!/usr/bin/perl use strict; use warnings; use OutBuffer; my $ob = OutBuffer->new(tmpdir => 'd:/tmp') or die $@; $ob->start; # die Ähnlichkeit mit PHP ob_start ist rein zufällig # ein paar print-Anweisungen print 123456789, "\n", "...hau rein ...\n"; # sehnix # hier ein paar kritische Sachen, wo eine # Exception geworfen werden könnte eval{ die 123}; print "Hallo???"; # und noch ein print... # harvest # try/catch if($@){ $ob = undef; print $@; } else{ $ob->out; }
2012-12-17T10:43:37 payxHallo rosti,
OutBuffer habe ich im CPAN nicht gefunden. Warum verwendet Du nicht File::Temp? Das funktioniert nach meiner Erfahrung prima (ohne statischen Pfad, mit cleanup usw.).
Grüße
payx
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
package OutBuffer; use strict; use warnings; use File::Temp qw(tempfile); use Carp; sub new{ my $class = shift; my %in = ( tmpdir => '/tmp', @_); my $self = bless{}, $class; return eval{ croak "Dir '$in{tmpdir}' does'nt exists" if not -d $in{tmpdir}; croak "No write permission to '$in{tmpdir}'" if not -w $in{tmpdir}; ($self->{FH}, $self->{FN}) = tempfile(DIR => $in{tmpdir}) or croak "Can't create tmp FH, FN"; $self; }; } sub start{ my $self = shift; select $self->{FH}; } # from temp Handle to STDOUT sub out{ my $self = shift; seek $self->{FH}, 0,0; select STDOUT; while(read $self->{FH}, my $buffer, 1024){ print $buffer } } # delete tmp File sub DESTROY{ my $self = shift; close $self->{FH} if defined $self->{FH}; unlink $self->{FN} if defined $self->{FN}; select STDOUT; } 1;##################################################################################################