G'day techgrrl,
Welcome to the monastery.
Perl is reading up to the statement terminator (semicolon) on line 92 before deciding that it's found a disallowed bareword. The fact that line 92 also contains KNOWN_HOSTS is something of a red herring. Consider:
$ perl -Mstrict -E ' while (KNOWN_HOSTS) { say "Hello"; last; } close KNOWN_HOSTS; ' Bareword "KNOWN_HOSTS" not allowed while "strict subs" in use at -e li +ne 6. Execution of -e aborted due to compilation errors.
versus
$ perl -Mstrict -E ' while (KNOWN_HOSTS) { say "Hello"; last; } say "Bye"; ' Bareword "KNOWN_HOSTS" not allowed while "strict subs" in use at -e li +ne 6. Execution of -e aborted due to compilation errors.
Where code extends over multiple lines, Perl will typically report an error at the end of the multi-line code. You need to bear this in mind when debugging - you can have instances where you need to backtrack many lines to find the line where the actual problem has occurred.
If you're wondering why Perl didn't see the closing brace as the end of the statement, consider:
$ perl -Mstrict -E ' while (KNOWN_HOSTS) { say "Hello"; last; } continue { 1; } ' Bareword "KNOWN_HOSTS" not allowed while "strict subs" in use at -e li +ne 8. Execution of -e aborted due to compilation errors.
Aside: where you used perl -MO=Deparse -p ... above, I'm wondering if you meant perl -MO=Deparse,-p ..., i.e. s/ -p/,-p/.
-- Ken
In reply to Re: Why is the error thrown from close(FH) when the error is the missing <> on while(FH)?
by kcott
in thread Why is the error thrown from close(FH) when the error is the missing <> on while(FH)?
by techgrrl
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |