use strict; use warnings; use feature "say"; #no warnings 'redefine'; sub tst {1} BEGIN { $a = \&tst } sub tst {2} BEGIN { $b = \&tst } say &$a; say &$b; #### perl false_postive_redefine.pl Subroutine tst redefined at false_postive_redefine.pl line 7. 1 2 #### use feature "try"; use constant CHECK_HINTHASH => 0; sub check_hinthash {warn "feature_try = ".$^H{feature_try} if CHECK_HINTHASH} #... BEGIN { check_hinthash() } # feature enabled { no feature qw( try ); BEGIN { check_hinthash() } # feature disabled use Try::Tiny qw( try catch ); try { ... }; } BEGIN { check_hinthash() } # feature enabled # try { ... }; <-- would fail