in reply to how to control/redirect print()
I guess there are some other possibilities here, depending upon whether you are writing to a file or to something that Perl can identify as the console. STDERR is non-buffered while STDOUT is buffered when writing to pipes,files. STDERR will come out right NOW, vs STDOUT which will print when it's buffer is full, maybe 4-8K bytes or so.
#!/usr/bin/perl -w use strict; use 5.10.0; ## needed for "say" print "First, Order as written:\n"; my $str = q[new text]; $str .= sample( qw(1 2 3) ); #adds '1' to $str $str .= q[more new text]; print_now( "$str \n" ); sub sample { print q[sample(): ], @_, "\n"; } sub print_now { say @_; ## or # print $FH @_; # this an error what is $FH? } print "Now, reverse order:\n"; #################### my $delayedout; open (DELAY, '>', \$delayedout) or die "$!"; $str = q[new text]; $str .= sampleb( qw(1 2 3) ); $str .= q[more new text]; print_nowb( "$str \n" ); print $delayedout; sub sampleb { print DELAY q[sample(): ], @_, "\n"; } sub print_nowb { say @_; } __END__ PRINTS: First, Order as written: sample(): 123 new text1more new text # 1 is return value of sample # extra \n comes from say statement. Now, reverse order: new text1more new text sample(): 123
|
|---|