Ovid has asked for the wisdom of the Perl Monks concerning the following question:
The problem is a long story, but the minimal test case is pretty clear. I have a subroutine which needs to know where is was called. For example:
while ( my $value = some_sub() ) { # do something my $other_value = some_sub(); }
In the above case, it's pretty easy to disambiguate:
sub some_sub { my @caller = caller(); # now I know where I was called }
That assigns the package, filename, and line number to @caller. However, there's a very weird edge case here:
for ( 1 .. 10 ) { my ( $foo, $bar ) = ( some_sub(), some_sub() ); # do stuff }
@caller will hold the same value for each of those. I'm overriding a pre-existing interface, so I'm not at liberty to change said interface. Without more information available, is there any way in &some_sub to know which invocation on a line was called? I can't hardcode any knowledge about the structure of calling lines because this may be called in many different places.
Cheers,
Ovid
New address of my CGI Course.
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re: Where was I called?
by BrowserUk (Patriarch) on Sep 28, 2006 at 12:54 UTC | |
by Ovid (Cardinal) on Sep 28, 2006 at 13:26 UTC | |
by diotalevi (Canon) on Sep 28, 2006 at 15:35 UTC | |
by Ovid (Cardinal) on Sep 28, 2006 at 15:54 UTC | |
by ysth (Canon) on Sep 29, 2006 at 02:39 UTC | |
|
Re: Where was I called?
by cephas (Pilgrim) on Sep 28, 2006 at 13:20 UTC | |
|
Re: Where was I called?
by Anonymous Monk on Sep 28, 2006 at 11:08 UTC | |
by larsen (Parson) on Sep 28, 2006 at 14:15 UTC | |
|
Re: Where was I called?
by monkey_boy (Priest) on Sep 28, 2006 at 10:42 UTC | |
|
Re: Where was I called?
by Anonymous Monk on Sep 28, 2006 at 10:41 UTC |