in reply to Re: redirect stdout into hash
in thread redirect stdout into hash

Its seems everyone is right that an array may be easier. For memory efficiency, what is the best way to pipe the output into an array?

Replies are listed 'Best First'.
Re^3: redirect stdout into hash
by zentara (Cardinal) on Jun 13, 2012 at 19:48 UTC
    If you want to change from hash, a concated scalar string is probably your best bet, unless you need an array of lines.Here is how to do either way.
    # make a global array for storage my @array; #or make a global scalar string my $storage_string; ..... ..... while(!$channel->eof()) { my $buff; $channel->read($buff, 1024); # print $buff; push @array, $buf; # pushes $buf into next array slot # or use a concated string $storage_string .= $buf; # concantates $buf onto end of stri +ng }
    When you want to read the array, you have a couple of options. Since your newlines may still be out of place, you may get staggered lines, but if you print the array it may reassemble itself properly
    $/ = ''; # change output separator to nothing instead of newline print @array, "\n";
    but this just recreates a string with embedded newlines

    If you go with the concated string route, you can easily split on newlines:

    my @lines=split( /\n/, $storage_string); print "@lines\n"; # or since $storage_string contains embedded newlines, just printing i +t would work print "$storage_string\n";
    Either way, an array joined with the output separator set to '', or a concated string split on newlines should give good results.

    I'm not really a human, but I play one on earth.
    Old Perl Programmer Haiku ................... flash japh
      Thanks, it worked perfectly without the concatenated string!