in reply to The third 'if'
Some helpful indentation would point out troubles with your code.
Nested magical while loops will walk on each other's $_. I don't think that is hurting you here, but it will someday.
You have a logic bug, your code says,
No line satisfies both conditions. You need to last out of the inner loop if the header is wrong. If the header is right keep saying next until you find "Impressions:" or run out of lines.while ( lines_to_read() ) { if ( the_line_is_the_right_header()) { if ( the_line_also_has_impressions) { # impression things } } }
Your impression handling code treats a string with leading spaces (from split /:/) as a number. That will always evaluate to zero. [ysth++ is correct. I still think:] split /:\s*/ will work better.
Update: Here is the whole loop in pseudocode with last and next applied to fix the logic,
while (files_to_read()) { next unless the_line_is_the_right_header(); while ( lines_to_read() ) { next unless the_line_has_impressions(); # impression things last; # no need to look further in this file } }
After Compline,
Zaxo
In Section
Seekers of Perl Wisdom