http://www.perlmonks.org?node_id=575320

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.