Beefy Boxes and Bandwidth Generously Provided by pair Networks
laziness, impatience, and hubris
 
PerlMonks  

Re: Autoloading and anonymous subs

by shmem (Chancellor)
on Jun 27, 2007 at 16:53 UTC ( [id://623674]=note: print w/replies, xml ) Need Help??


in reply to Autoloading and anonymous subs

Does $Foo::foo->() not mean locate the sub in the package Foo?

No. $Foo::foo is a symbol living in the symbol table Foo, that's granted; but its contents must not neccessarily refer to package Foo. So the normal method lookup rules apply. Which means that AUTOLOAD in the package main is found first.

update: If the content of $Foo::foo is a sub reference in the Foo namespace, the Foo AUTOLOAD is found, eg

$Foo::foo = \&Foo::bar; print $Foo::foo->(); # Foo

--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}

Replies are listed 'Best First'.
Re^2: Autoloading and anonymous subs
by haoess (Curate) on Jun 27, 2007 at 22:58 UTC

    And it's always the main package:

    package Foo; sub AUTOLOAD { __PACKAGE__ } print $foo->(); package main; sub AUTOLOAD { __PACKAGE__ } __END__ main

    I just can't find the documentation for this behaviour.

    -- Frank

      You are calling an undefined coderef. This coderef (which isn't, being just nothing, or not existing) has no association with any package, albeit the variable holding "that nothingness" (if nothing can be something) has. Now, how should perl resolve that sensibly? There's no package, there's no code, there's no sub. Hence the default package (main), and as last resort, AUTOLOAD.

      The documentation is implicit in perlsub, perlref, ...

      --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}
Re^2: Autoloading and anonymous subs
by rir (Vicar) on Jun 28, 2007 at 21:04 UTC
    How do you take the address of a sub that needs to be AUTOLOADed before it is AUTOLOADed? Hmmm?

    Be well,
    rir

      *shrug* I just do. It's a magic called autovivification :-P

      --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}

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://623674]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others rifling through the Monastery: (2)
As of 2024-04-26 05:50 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found