in reply to Re: Re: Proper syntax for using a method as a call back routine?
in thread Proper syntax for using a method as a call back routine?
Think of it this way. When you call a method,
$object->method( 1, 2, 3 );
What perl does is
You can see this yourself if you print a blessed reference and you get something like My::Package=HASH(0x1d154d8). In this case $object is a hashref that was blessed into the package My::Package.
Hence, the first thing you shift off @_ within the method is $self. Ie. The object upon which the method was called.
However, when you take the address of a method
and then later invoke it (or have the parser invoke for you),my $codref = \&$object->method;
$coderef->( 1, 2, 3 );
Perl no longer recognises that you are invoking a method rather than a function, and therefore doesn't add $object to the stack. Even if it knew that this was a method call, it no longer knows which package (or which instance of that package) was used to derive the address of the method. So it wouldn't know what $object to pass.
Indirecting the call through a closure simply allows you to retain the instance handle along with the method to be invoked, with the slight penalty of the two step process of getting there.
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re: Re: Re: Re: Proper syntax for using a method as a call back routine?
by nysus (Parson) on Jul 08, 2003 at 12:29 UTC |