# 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.
Notice how the version passed to Module1 is completely ignored.
In writing this test, I also found errors in what I thought I knew.
1) *import = \&Exporter::import; doesn't work as well as I thought. My original Module2 gave a run-time error. It was:
package Module2; use Exporter (); our $VERSION = '2.0'; *import = \&Exporter::import; 1;
To fix without inheriting from Exporter, one needs to also import require_version:
package Module2; use Exporter (); our $VERSION = '2.0'; *import = \&Exporter::import; *require_version = \&Exporter::require_version; 1;
2) I always thought use Module 'maj.min' would make sure the major version is the same as the one in $VERSION, yet use Module2 '1.0' doesn't fail.
In reply to Re^4: Finding version of a Perl module
by ikegami
in thread Finding version of a Perl module
by bradcathey
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |