Beefy Boxes and Bandwidth Generously Provided by pair Networks
laziness, impatience, and hubris

lima1's scratchpad

by lima1 (Curate)
on Jul 25, 2007 at 18:27 UTC ( #628757=scratchpad: print w/replies, xml ) Need Help??

When 100% Code Coverage Backfires
PBP's .perltidyrc file, was Re: Perl Best Practices
last hour of cb

Title: How do I skip the first $n lines of a file efficiently?

Question: Suppose I want to read a file but I'm not interested in the first $n lines. What's the best way of skipping these first $n lines? Answer: To accomplish this task, one often sees code like this:

my $line_id = 0; LINE: while (my $line = <$IN>) { $line_id++; next LINE if $line_id < $n; # now parse the interesting part of the file ... }
The problem with this approach is that the test is performed on every single line of the file. Which is not necessary as we can do the skipping before the main while loop. The probably shortest and most efficient way to do that is:
{ local $. = 0; do {} while ($. < $n && <$IN>); } while (my $line = <$IN>) { ... }
$. is the line counter of the current file handle. See perlvar.
Log In?

What's my password?
Create A New User
[LanX]: Komodo users here?
[LanX]: do snippets allow dropdown menues for choosing values?

How do I use this? | Other CB clients
Other Users?
Others rifling through the Monastery: (6)
As of 2018-03-19 17:09 GMT
Find Nodes?
    Voting Booth?
    When I think of a mole I think of:

    Results (244 votes). Check out past polls.