http://qs1969.pair.com?node_id=413725

Use the imported "Sub" instead of "sub", and you can create an anonymous coderef that acts normally except when dereferenced as a string, where it returns the filename and line number of where it was defined. See the example for usage.

This code came from the discussion in the thread that includes •Re^5: How to de-reference a coderef?.

BEGIN { package MagicalCoderef; use overload '""' => sub { require B; my $ref = shift; my $gv = B::svref_2object($ref)->GV; sprintf "%s:%d", $gv->FILE, $gv->LINE; }; sub main::Sub (&) { return bless shift, __PACKAGE__; } } my $s = Sub { print +shift }; $s->("hello world\n"); print "$s\n";