Chas. Owens wrote:
>
On Jan 23, 2008 10:29 PM, Rob Dixon <[EMAIL PROTECTED]> wrote:
>>
Chas. Owens wrote:
On Jan 23, 2008 10:07 PM, Rob Dixon <[EMAIL PROTECTED]> wrote:
Along these lines, can someone explain to me why
use strict 'vars';
my $name = 'data';
print foreach @$name;
produces no error, when
use strict 'vars';
print foreach @data;
does?
>>>
Because use strict 'vars' runs in the compile phase and the symbolic
reference is not resolved until the run phase.
>>
Of course. Thanks Chas. I think the docs could do with a tweak here.
They seem fine to me:
from perldoc strict
"strict refs"
This generates a runtime error if you use symbolic references
snip
"strict vars"
This generates a compile-time error if you access a variable that
wasn't declared via "our" or "use vars", localized via "my()", or
wasn't fully qualified.
snip
"strict subs"
This disables the poetry optimization, generating a compile-time
error if you try to use a bareword identifier that's not a sub-
routine, unless it is a simple identifier (no colons) and that it
appears in curly braces or on the left hand side of the "=>" sym-
bol.
The effects and when they happen is fairly clearly spelled out.
Humorously enough,
use strict subs;
violates itself, but it can't catch the error (since it occurred
before $^H was set).
And even that's an improvement IMO. In the full version the
'compile-time error' and 'runtime error' qualifications are at the start
of a long exposition of what conditions trigger the the pragma and I
think they belong in a sentence of their own.
The critical point is that the /checks/ are run time ones or compile
time ones. It was easy for me to overlook the type of error generated,
as it simply doesn't matter as long as it generates one. It's incorrect
in that my code /does/ fulfil the listed conditions for generating a
compile-time error: it accesses @data which hasn't been declared.
According to the description this should magically generate a
compile-time error but it didn't. The fact that to do so would be
impossible because a run time event can't trigger a compile time error
doesn't make the write-up correct.
At the very least, there's an error in that it should read '... and
wasn't fully qualified'. :)
Rob
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
http://learn.perl.org/