use v5.12; # This is basically a dummy override that must be performed early # on so that Perl knows we'll be overriding CORE::GLOBAL::caller # later... # BEGIN { *CORE::GLOBAL::caller = sub { CORE::caller(@_) } }; sub foo { say scalar caller; } sub bar { local *CORE::GLOBAL::caller = sub { 'xxxx' }; foo(); } foo(); bar(); #### $ perl -MO=Concise -E'BEGIN { *DUMMY::GLOBAL::caller = sub {} }; caller()' 4 <@> leave[1 ref] vKP/REFC ->(end) 1 <0> enter ->2 2 <;> nextstate(main 49 -e:1) v:%,{,2048 ->3 3 <0> caller[t1] v* ->4 -e syntax OK $ perl -MO=Concise -E'BEGIN { *CORE::GLOBAL::caller = sub {} }; caller()' 6 <@> leave[1 ref] vKP/REFC ->(end) 1 <0> enter ->2 2 <;> nextstate(main 49 -e:1) v:%,{,2048 ->3 5 <1> entersub[t3] vKS/TARG,1 ->6 - <1> ex-list K ->5 3 <0> pushmark s ->4 - <1> ex-rv2cv sK ->- 4 <#> gv[*CORE::GLOBAL::caller] s ->5 -e syntax OK