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

Re: Fun with duff's device and AUTOLOAD

by Abigail-II (Bishop)
on Feb 24, 2004 at 09:59 UTC ( #331354=note: print w/replies, xml ) Need Help??

in reply to Fun with duff's device and AUTOLOAD

Copying? ;-) I don't think anything ends up in @b.

Let's analyze the program. First you initialize @a with some large and small numbers. Then you tie @b - but to what, one may ask. Well, the result of &^Px$^P. It's not really relevant what &^P returns (an object - the result of AUTOLOAD), because $^P is essentially 0, leading to &^Px$^P being an empty string. Hence, it's tied into the class main. This causes main::TIEARRAY to be called, which is taken care off by AUTOLOAD - which returns an empty object blessed into the main class. Now Duff's device copies the elements of @a into @b one by one. However, since @b is tied, instead of storing the elements in @b, main::STORE is called. Again, this is taken care of by AUTOLOAD, but it doesn't store anything, it just returns another blessed object (which will be discarded right away).

What remains is the two subs. First the empty DESTROY makes sure destruction of the many objects created doesn't trigger AUTOLOAD to be called. Then AUTOLOAD. The first line sets $# to the value %c. This influences the way how Perl stringifies numbers (basically by doing sprintf "%c", $number;). It also sets %c, but that hash is never accessed. Then it prints $_[2], which, in the case of STORE, contains the number to be stored. Due to the way stringification has been altered, it results into garbage on my screen. Perhaps with another printing device a sensible message appears (I suspect the numbers in @a not to be random).

And that's it. Nothing is going to be stored in @b.


Replies are listed 'Best First'.
Re: Re: Fun with duff's device and AUTOLOAD
by ambrus (Abbot) on Feb 25, 2004 at 21:42 UTC

    Thanks for posting the solution.

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://331354]
[Mr. Muskrat]: (considered) Re^3: Please help with Regexp::Common needs to be reparented to Re^2: Please help with Regexp::Common
[Mr. Muskrat]: Is it just me or does that timeout issue seems to be happening more often lately?
[Corion]: Mr. Muskrat: I'm not sure if it really happens more often, but I don't exactly know either
[LanX]: yep
[LanX]: more often for some weeks now
[Corion]: I think I'll have to manually (as god) intervene with that node, as the simple reparenting didn't seem to fix the parent/child relationship of the nodes
[Corion]: I think I have an idea but I'll have to open a ticket with on that - hopefully I get to that on the weekend
LanX imagines a burning thorn bush
[Mr. Muskrat]: Thank you!

How do I use this? | Other CB clients
Other Users?
Others meditating upon the Monastery: (11)
As of 2017-01-19 16:22 GMT
Find Nodes?
    Voting Booth?
    Do you watch meteor showers?

    Results (170 votes). Check out past polls.