in reply to Re^7: undef/defined &{$name} while "strict refs"
in thread undef/defined &{$name} while "strict refs"
No, here is the relevant quote from the documentation for the strict pragma:
strict refs This generates a runtime error if you use symbolic references (see per +lref). ... There is one exception to this rule: $bar = \&{'foo'}; &$bar; is allowed so that goto &$AUTOLOAD would not break under stricture.
and here is code demonstrating the problem:
>perl -Mstrict -e "sub walk {} sub run {} my $walkable = defined(&{'wa +lk'}); my $runnable = &{'run'};" Can't use string ("run") as a subroutine ref while "strict refs" in us +e at -e line 1.
So, the question is: How does the documented exception for use strict 'refs', which allows use of a reference to a symbolic sub, explain the observed fact that when defined is applied to the sub itself (not a reference), no runtime error is raised?
Or, conversely: If the expression &{'walk'} is legal as an argument to defined, why is the expression &{'run'} illegal as the right-hand-side of an assignment?
How (and why) does Perl distinguish between these two cases?
Athanasius <°(((>< contra mundum
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^9: undef/defined &{$name} while "strict refs"
by Anonymous Monk on Aug 21, 2012 at 08:45 UTC | |
|
Re^9: undef/defined &{$name} while "strict refs"
by anazawa (Scribe) on Aug 21, 2012 at 10:08 UTC |