Yes, you can redirect STDOUT to a variable. But you need some kind of statement to select between "normal STDOUT" and the "variable STDOUT". Another possibility is open a filehandle to a variable and just add that filehandle after the print's that you want to go there. And then just print that variable when you want that output to show up? Note: all I/O routines return status, including print - that's what causes this extra '1' to show up in the printout and it is the default return value from sample(), assuming the print succeeds which it almost always does.

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

In reply to Re: how to control/redirect print() by Marshall
in thread how to control/redirect print() by smile4me

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.