Check out the code below (inspired by a comment from dws in a recent chatterbox discussion)
use Benchmark; sub sub1 { my $fh; open $fh, 'vsfull.csv'; binmode $fh; my @lines; my $block; my $left = ''; while( read $fh, $block, 8192 ){ $block = $left . $block; my $i = index $block, "\n"; while($i > 0){ push @lines, substr($block,0,$i); substr($block,0,$i+1,''); $i = index $block, "\n"; } $left = $block; } } sub sub2 { my $fh; my @lines; open $fh, 'vsfull.csv'; while(<$fh>){ push @lines, $_ }; } timethese( 100, { readbig => \&sub1, whilelp => \&sub2 });
The results?
Benchmark: timing 100 iterations of readbig, whilelp... readbig: 25 wallclock secs (25.21 usr + 0.00 sys = 25.21 CPU) @ 3 +.97/s (n=100) whilelp: 157 wallclock secs (156.71 usr + 0.00 sys = 156.71 CPU) @ + 0.64/s (n=100)
Now admittedly, my code is probably clunky and whatnot, but I would assume that this would be the model one would follow for splitting a file into multiple lines. My question has two parts: why would one use <> when it's so slow relative to read, and why hasn't <> been implemented in such a fashion that it takes advantage of read's quickness? Cluka

In reply to Why use <$fh> at all? by cluka

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.