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


in reply to Hacking perl

Definitely a nice hack, robin++ ... but it leaves a question open. Consider:

local *foo:

*foo = [qw (a b c)]; { local *foo = [qw(1 2 3)]; print "local \@{\*foo{ARRAY}} = qw(@{*foo{ARRAY}})\n"; print "local \@foo = qw(@foo)\n"; } print "global \@foo = qw(@foo)\n"; __END__ local @{*foo{ARRAY}} = qw(1 2 3) local @foo = qw(1 2 3) global @foo = qw(a b c)

my *foo:

*foo = [qw (a b c)]; { my *foo = [qw(1 2 3)]; print "my \@{\*foo{ARRAY}} = qw(@{*foo{ARRAY}})\n"; print "my \@foo = qw(@foo)\n"; } print "global \@foo = qw(@foo)\n"; __END__ my @{*foo{ARRAY}} = qw(1 2 3) my @foo = qw(a b c) global @foo = qw(a b c)

Hmm. The lexical glob is created ok, but other than with local, glob corresponding variables aren't treated as aliases to the typeglob entries in the current scope.

Now, should that happen? I think, it should; but such lookup should also warn about "masking an earlier @foo in the same scope".

What do you think?

--shmem

_($_=" "x(1<<5)."?\n".q·/)Oo.  G°\        /
                              /\_¯/(q    /
----------------------------  \__(m.====·.(_("always off the crowd"))."·
");sub _{s./.($e="'Itrs `mnsgdq Gdbj O`qkdq")=~y/"-y/#-z/;$e.e && print}