# Module1.pm # ========== package Module1; our $VERSION = '2.0'; 1; #### # Module2.pm # ========== package Module2; use Exporter (); our $VERSION = '2.0'; our @ISA = 'Exporter'; 1; #### # script.pl # ========= BEGIN { print("Loading Module1...\n"); } use Module1 '3.0'; BEGIN { print("Loaded.\n"); } BEGIN { print("Loading Module2...\n"); } use Module2 '3.0'; BEGIN { print("Loaded.\n"); } #### output ====== Loading Module1... Loaded. Loading Module2... Module2 3.0 required--this is only version 2.0 (Module2.pm) at script.pl line 6 BEGIN failed--compilation aborted at script.pl line 6. #### package Module2; use Exporter (); our $VERSION = '2.0'; *import = \&Exporter::import; 1; #### package Module2; use Exporter (); our $VERSION = '2.0'; *import = \&Exporter::import; *require_version = \&Exporter::require_version; 1;