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.
In reply to Where was I called? by Ovid
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |