in reply to Re^12: Constant subroutine main::C redefined
in thread Constant subroutine main::C redefined

The definition of the constants happens at compile time. The assignment to $SIG{__WARN__} happens at run time. You want it in a BEGIN block.

perl -wE'BEGIN{$SIG{__WARN__}=sub{}}; sub f(){1}; say f; sub f(){2}; s +ay f;'
perl -E'sub Monkey::do{say$_,for@_,do{($monkey=[caller(0)]->[3])=~s{::}{ }and$monkey}}"Monkey say"->Monkey::do'