|We don't bite newbies here... much
Re: A caller() by any other nameby xdg (Monsignor)
|on Dec 02, 2008 at 02:07 UTC
It's a little hard to know what you mean, but if you want Object A to call a method on Object B and have B know that A was the object that called it, then you can just pass A as an argument. In other words, you define a consistent API where the @_ array always contains self and the calling object.
The examples above don't do anything with $caller, but you can see how $self is included as an argument to the bar method call.
For a real-world example of this kind of thing, look at POE, which defines array-offset constants to pick out specific objects that are always passed as arguments. For example:
It seems a little clunky at first glance, but when used consistently across all POE modules, it actually starts seeming elegant.
Code written by xdg and posted on PerlMonks is public domain. It is provided as is with no warranties, express or implied, of any kind. Posted code may not have been tested. Use of posted code is at your own risk.