in reply to Re^3: typeglob: $var = *x ???
in thread typeglob: $var = *x ???

I showed that it doesn't need dereferencing.
$gv = *x; @$gv => @x
perlreftut says that the syntax @$gv is a shortcut for @{$gv}, and that looks like the very definition of dereferencing to me (see perlreftut, Use Rule 1). As far as I can tell, the only time you don't have to dereference the variable is when you use it as a filehandle--in that case it appears that perl uses the context to determine that it should extract the filehandle part of the typeglob.

Replies are listed 'Best First'.
Re^5: typeglob: $var = *x ???
by ikegami (Patriarch) on Jun 16, 2011 at 15:30 UTC

    that looks like the very definition of dereferencing to me

    I thought you meant $gv vs *$gv

    it's not obvious that $val needs dereferencing.

    Completely false.

    "@foo" returns the list of elements in the array. "$foo" does not.

    According to you, (A) and (B) and (C) should be the same?

    A: @m = $x; B: @m = @$x; C: @m = $$x;

    The only thing that may not be obvious is that globs can be "dereferenced" instead of having to do *$gv{ARRAY}.

    As far as I can tell, the only time you don't have to dereference the variable is when you use it as a filehandle

    Both the "@" and "print" operators accept a scalar containing a glob. The first peeks into the ARRAY slot. The latter peeks into the IO slot. Both "dereference" the glob.