in reply to redirect stream from wirte; to $string

My eyes always miss this in the documentation, but starting in Perl 8.8 or thereabouts you can make a string into a file handle and then select it as the default file handle for write:

#make string into file handle my $sBuf=''; open(my $fhOut, '>', \$sBuf); #\$sBuf is a reference to $sBuf # make it your output stream for format/write select $fhOut; my ($sName, $iAge); format SomeFormat = Test: @<<<<<<<<<<<< @>>>>> $sName, int($iAge) . $sName = "MickeyMouse"; $iAge = 82; #born Nov, 1928 $~ = 'SomeFormat'; write; print "buffer is: <$sBuf>\n";

If you have perl 5.8.8 installed the documentation only shows up in open and not in perlopentut. In the Perl 5.12.2 documentation, there is a FAQ question devoted to this.

Alternatively, you can also try to follow the advice here to roll your own swrite() function.

Update: added sample code using string buffer file handle with format and write

Update: added the 5's, as per DrHyde below.

Replies are listed 'Best First'.
Re^2: redirect stream from wirte; to $string
by DrHyde (Prior) on Jan 31, 2011 at 10:54 UTC

    You do of course mean perl *5*.8.8 and *5*.12.2.

    There's also IO::Scalar and IO::String on the CPAN.