in reply to How can I find the calling object?

You can't.

What's wrong with:

sub method { my ($self) = shift; my $object = Object->new; $object->method2($self,@other_args); }
anyway?

If you've got some special problem that needs this functionality, maybe there is another way to solve it.

update: fixed typo.

-- Joost downtime n. The period during which a system is error-free and immune from user input.

Replies are listed 'Best First'.
Re: Re: How can I find the calling object?
by strider corinth (Friar) on Nov 18, 2002 at 16:52 UTC
    It doesn't solve the problem. That's what's wrong with it. ;) The original calling object isn't made available to my receiving object.

    I'm working with a static package somebody else wrote. When a sub in my package is called, it needs to do something to the calling object. As dakkar pointed out (and you saw) it is possible. =) I think it ought to be easier, but I didn't (nor am I remotely qualified to) design the language I'm using.

    I'm wary, though, when I hear somebody say "it can't be done". It's very easy to prove something possible. It's near to impossible to prove that a thing is impossible. I do have a number of other ways to solve the problem, but they're all kludges. I want a better way, and I think it may well exist someplace. If it does, I expect the answer to come from the undocumented depths of the way Perl works, on a much lower level than I currently understand. But I do think it may be out there.
    --
    Love justice; desire mercy.
      I would probably rewrite the other package in this case, but if you really can't I would suggest using the caller/DB trick below. It's really nasty and somewhat underdocumented, but it will probably work.

      But in my view it's simple: the problem lies not in your code, it's in the other package. Fix the problem; fix the other package.

      -- Joost downtime n. The period during which a system is error-free and immune from user input.