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


in reply to Re: Canon concerning coderef calls?
in thread Canon concerning coderef calls?

This works beautifully, but this novice is at a loss to understand why.

Is not $:: an indicator that the sub is in the main package? So that $::{$_} is the subroutine $_ in the main package? And then that is called with the arguments $_?

Why does this allow us to do the referencing/dereferencing in one step, is this novice missing something here?

Replies are listed 'Best First'.
Re^3: Canon concerning coderef calls?
by NetWallah (Canon) on Nov 15, 2004 at 20:19 UTC
    Yes - you have understood the sequence correctly.

    The relevant document is the "Symbol Table" section of perlmod.

    The symbol table for a package happens to be stored in the hash of that name with two colons appended. The main symbol table's name is thus %main::, or %:: for short. ...

    Hence "$::" is de-referencing the "%main::" hash, using "$_" as the key. The following parens prvide the "sub" context, and allow the sub to be passed the $_ param.

        Earth first! (We'll rob the other planets later)

      Ah, so that's how it works...

      I didn't realize that the main package was named %main and not $main, so I didn't see the dereference there.

      Thank you for taking the time to explain, and thanks to tmoertel for granting us his wisdom in the first place.

      jobi - a little bit wiser now.