#! BEGIN { # Convert the warning to Carp::cluck $SIG{__WARN__} = sub { Carp::cluck(@_); }; }; use Carp; use strict; use warnings; use Mod1; use Mod2; INIT { # Clear the warning to Carp::cluck $SIG{__WARN__}='DEFAULT'; }; sub One { # First definition return "first"; }; sub One { # Second definition return "second"; }; print One()."\n"; exit; #### package Mod1; use Exporter; use strict; use warnings; @Mod1::ISA=qw(Exporter); @Mod1::EXPORT=qw(One); sub One { return "Mod1::One"; }; 1; #### package Mod2; use strict; use warnings; use Mod1; @Mod2::ISA=qw(Exporter); @Mod2::EXPORT=qw(One); sub One { return "Mod1::One"; }; 1; #### C:\Code\SecCage>perl redef.pl Subroutine One redefined at Mod2.pm line 10. at redef.pl line 5 main::__ANON__('Subroutine One redefined at Mod2.pm line 10.\x{a}') called at Mod2.pm line 10 require Mod2.pm called at redef.pl line 12 main::BEGIN() called at Mod2.pm line 10 eval {...} called at Mod2.pm line 10 Subroutine One redefined at redef.pl line 19. at redef.pl line 5 main::__ANON__('Subroutine One redefined at redef.pl line 19.\x{a}') called at redef.pl line 19 Subroutine One redefined at redef.pl line 23. at redef.pl line 5 main::__ANON__('Subroutine One redefined at redef.pl line 23.\x{a}') called at redef.pl line 23 second