http://qs1969.pair.com?node_id=324046


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,

while ( lines_to_read() ) { if ( the_line_is_the_right_header()) { if ( the_line_also_has_impressions) { # impression things } } }
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.

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