Beefy Boxes and Bandwidth Generously Provided by pair Networks
Welcome to the Monastery
 
PerlMonks  

Re: Autoloading and anonymous subs

by shmem (Canon)
on Jun 27, 2007 at 16:53 UTC ( #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}


Comment on Re: Autoloading and anonymous subs
Select or Download Code
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
Node Status?
node history
Node Type: note [id://623674]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others cooling their heels in the Monastery: (5)
As of 2014-09-21 11:03 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    How do you remember the number of days in each month?











    Results (168 votes), past polls