in reply to Re^3: Finding version of a Perl module
in thread Finding version of a Perl module
# 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.
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^5: Finding version of a Perl module
by itub (Priest) on Sep 09, 2005 at 15:34 UTC | |
by ikegami (Patriarch) on Sep 09, 2005 at 15:37 UTC |