On 12/5/05, Jennifer Garner <[EMAIL PROTECTED]> wrote:
> As we know, $::{sym} == *main::sym, it's a typeglob.
> but what is **main::sym? and the same,what is *{$glob}?thanks.

**main::sym is a syntax error, but *{*main::sym}==*main::sym.

But don't be fooled by the equality $::{sym} == *main::sym. It just
means they numerically compare the same. Taking references you get
that $::{sym} returns a scalar and *main::sym a glob.

$ perl -e 'print \($::sym, *main::sym)'
SCALAR(0x1002f094)GLOB(0x10010fa8)

So *{$glob} is the way to tell Perl to go from the scalar to the glob,
when we'll be able to access its HASH part.

That's why

$ perl -e 'our %sym = (name => "flower"); print ${*{$::{sym}}{HASH}}{name};"

prints "flower", but

$ perl -e 'our %sym = (name => "flower"); print ${$::{sym}{HASH}}{name};"

prints nothing ($::{sym}{HASH} returns undef). As Wiggins wisely said,
$sym->{name} is more sane.

--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>


Reply via email to