Description: 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?.

  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";