SYNOPSIS package MyClass; use Moo; # or Mo 'build', or Moose, or Mouse use Mooish::Util::Caller qw(get_constructor_caller get_constructor_callers); sub BUILD { # or BUILDARGS $caller = get_constructor_caller(); say $caller->[3]; # subroutine name } package main; sub f1 { MyClass->new } sub f2 { f1 } f2; # prints 'main::f1' FUNCTIONS get_constructor_caller([ $start=0 [, $with_args] ]) => ARRAYREF Like [caller($start)], but skips Mo/Moo/Moose/Mouse wrappers. Result will be like: # 0 1 2 3 4 5 6 7 8 9 10 [$package1, $filename1, $line1, $subroutine1, $hasargs1, $wantarray1, $evaltext1, $is_require1, $hints1, $bitmask1, $hinthash1], If $with_args is true, will also return subroutine arguments in the 11th element, produced by retrieving @DB::args. get_constructor_callers([ $start=0 [, $with_args] ]) => LIST A convenience function to return the whole callers stack, akin to what is produced by collecting result from get_constructor_caller($start+1) up until the last frame in caller stack. Result will be like: ( # for frame 0 # 0 1 2 3 4 5 6 7 8 9 10 [$package1, $filename1, $line1, $subroutine1, $hasargs1, $wantarray1, $evaltext1, $is_require1, $hints1, $bitmask1, $hinthash1], # for next frame [$package2, $filename2, $line2, ...] ... ) If $with_args is true, will also return subroutine arguments in the 11th element for each frame, produced by retrieving @DB::args. SEE ALSO