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>