in reply to What will this print?

Ehm, what's the puzzle?

In WWTP #1, we have two method calls. The first, $one->two(); calls two() in whatever package name is in $one, in this case, main, so main::two is called. The second print just calls one::two. You're not using @_, so what's passed as an argument isn't relevant.

In WWTP #2, you are using soft references. $one is two, $two is three and $three is four. So, $$$one (which can also be written as $$${"one"}) is four.

In WWTP #3, you first assign the %:: (which is the main stash) to %$one::, the stash of two namespace. Then you print the hash %$one (no relation to %$one::) in scalar context. This results in 0, because %$one is empty. Then you assign %:: to %$one, and you print that hash in scalar context. A non-empty hash in scalar context gives you a string with the number of used buckets and the number of allocated buckets, separated by a slash, as documented in perldata.

Abigail

Replies are listed 'Best First'.
Re: Re: What will this print?
by staunch (Pilgrim) on Mar 21, 2003 at 19:17 UTC
    I was certainly not trying to represent those questions as extremely difficult and certainly nothing that's going to throw you off :)

    I am really hoping that others will post some more WWTPs. I find these type of questions a fun way to learn and exercise my Perl knowledge, and hope others might as well.

    I appreciate your concise descriptions.

    Thanks,
    Staunch