http://www.perlmonks.org?node_id=1016455


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

This doesn't produce an error:
my $fname = 'data.txt'; open FH, "<", $fname or die "Couldn't open $fname: $!"; while(FH) { print "hello\n"; }
Nor does this:
while(FH) { print "hello\n"; }

According to "Perl Best Practices", p. 65:

In Perl, any identifier that the compiler doesn't recognize as a subroutine (or as package name or filehandle or label or builtin function) is treated as an unquoted character string:

$greeting = Hello . World; print $greeting, "\n"; #Prints: HelloWorld
I'm not sure why there are parentheses around "or package name or filehandle..." because the section is not about subroutines. And it should say, "...is treated as a string".
  • Comment on Re: Why is the error thrown from close(FH) when the error is the missing <> on while(FH)?
  • Select or Download Code

Replies are listed 'Best First'.
Re^2: Why is the error thrown from close(FH) when the error is the missing <> on while(FH)?
by parv (Parson) on Feb 01, 2013 at 06:45 UTC

    You missed to read the error message in OP, repeated below for you, that has the clue ...

    user@localhost ~$ ./strip_keys.pl -u user my-device.config Bareword "KNOWN_HOSTS" not allowed while "strict subs" in use at ./str +ip_keys.pl line 92. Execution of ./strip_keys.pl aborted due to compilation errors.

    ... run your own 1st snippet of code with "use strict;" and be able to reproduce the fatal error similar to above. Also, read up on "constant" pragma and "bareword".

      No, I saw it eventually--I was still editing my post when you posted. :)