use warnings; use v5.14; my $y = 2014; sub outer1 { my $x = $_[0] + 35; local *inner = sub { my $a = shift; local *__ANON__ = ( caller( 1 ) )[3] . "->inner"; say( ( caller( 0 ) )[3] ); return $y - $x * 19 + $a; }; return $x + inner( $_[0] / 2 ); } sub outer2 { my $x = $_[0] + 35; my $inner = sub { my $a = shift; local *__ANON__ = ( caller( 1 ) )[3] . "->inner"; say( ( caller( 0 ) )[3] ); return $y - $x * 19 + $a; }; return $x + $inner->( $_[0] / 2 ); } say outer1( 8 ); say outer2( 8 ); __END__ $ perl subtest.pl main::outer1->inner 1244 main::outer2->inner 1244