#!/usr/bin/perl my $a = sub { print "I am A\n" }; my $b = sub { print "I am B\n" }; $a->(); $b->(); $c = MagicalCodeRef->enchant( $a ); $a->(); print STDERR "That was $a I just called\n"; 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 enchant { bless $_[1], $_[0] } }