Beefy Boxes and Bandwidth Generously Provided by pair Networks
Don't ask to ask, just ask
 
PerlMonks  

Re: Why is the error thrown from close(FH) when the error is the missing <> on while(FH)?

by kcott (Abbot)
on Feb 01, 2013 at 07:55 UTC ( #1016474=note: print w/ replies, xml ) Need Help??


in reply to Why is the error thrown from close(FH) when the error is the missing <> on while(FH)?

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


Comment on Re: Why is the error thrown from close(FH) when the error is the missing <> on while(FH)?
Select or Download Code
Re^2: Why is the error thrown from close(FH) when the error is the missing <> on while(FH)?
by techgrrl (Acolyte) on Feb 01, 2013 at 16:36 UTC

    Thank you Ken!

    That was the source of my confusion. To summarize the answer: PERL reports multi-line errors at the end, and the close(FH) at the end of the piece of code was a red-herring.

    That was not behavior I was expecting.

    Have a great day!

    TechGrrl

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://1016474]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others avoiding work at the Monastery: (8)
As of 2014-11-23 20:27 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    My preferred Perl binaries come from:














    Results (134 votes), past polls