parent::versioned - Establish an ISA relationship with base classes at compile time, with version checking.
package Baz; # Just like parent: use parent::versioned qw(Foo Bar); # Plus version checking: use parent::versioned ['Foo' => 2.3], ['Bar' => 0.05], 'Baz'; # Version checking for Foo and Bar.
This module behaves identically to parent, except that it also provides a means of specifying a minimum version check for modules. It is a fork of parent version 0.237, and passes all of parent's tests, plus tests added to verify the version checking feature.
parent
If the list passed to parent::versioned contains an array-ref, that reference should specify a module name, and a minimum module version number. Multiple array-refs may be passed in the same call. Each module for which version checking is to be done should exist in its own array-ref tuple.
# No version checking on Foo or Bar. but Baz must be version 1.0 or higher. use parent::versioned qw(Foo Bar), ['Baz' => 1.0]; # Version check both Foo and Bar. use parent::versioned ['Foo' => 0.25], ['Bar' => 1.0]; # The -norequire parameter still works as expected: use parent::versioned -norequire, ['Foo' => 0.25], qw(Bar Baz);
Version checking is accomplished at compile time using the VERSION method. See perldoc -f use for an explanation of how VERSION() works.
VERSION
perldoc -f use
VERSION()
The remainder of this documentation is derived directly from parent.
Allows you to both load one or more modules, while setting up inheritance from those modules at the same time. Mostly similar in effect to
package Baz; BEGIN { require Foo; require Bar; push @ISA, qw(Foo Bar); }
By default, every base class needs to live in a file of its own. If you want to have a subclass and its parent class in the same file, you can tell parent::versioned not to load any modules by using the -norequire switch:
parent::versioned
-norequire
package Foo; sub exclaim { "I CAN HAS PERL" } package DoesNotLoadFooBar; use parent::versioned -norequire, 'Foo', 'Bar'; # will not go looking for Foo.pm or Bar.pm
This is equivalent to the following code:
package Foo; sub exclaim { "I CAN HAS PERL" } package DoesNotLoadFooBar; push @DoesNotLoadFooBar::ISA, 'Foo', 'Bar';
This is also helpful for the case where a package lives within a differently named file:
package MyHash; use Tie::Hash; use parent::versioned -norequire, 'Tie::StdHash';
package MyHash; require Tie::Hash; push @ISA, 'Tie::StdHash';
If you want to load a subclass from a file that require would not consider an eligible filename (that is, it does not end in either .pm or .pmc), use the following code:
require
.pm
.pmc
package MySecondPlugin; require './plugins/custom.plugin'; # contains Plugin::Custom use parent::versioned -norequire, 'Plugin::Custom';
parent already had very good tests that reached 100% coverage. This module has adapted all of the tests from parent to avoid regressions, and has added testing around the versioning functionality. Coverage remains at 100%:
---------------------------- ------ ------ ------ ------ ------ ------ ------ File stmt bran cond sub pod time total ---------------------------- ------ ------ ------ ------ ------ ------ ------ blib/lib/parent/versioned.pm 100.0 100.0 100.0 100.0 n/a 100.0 100.0 Total 100.0 100.0 100.0 100.0 n/a 100.0 100.0 ---------------------------- ------ ------ ------ ------ ------ ------ ------
This module was forked from parent 0.237, which itself was forked from base to remove the cruft that had accumulated in it.
David Oswald forked this module from parent version 0.237, and added version checking.
parent was authored by Rafaël Garcia-Suarez, Bart Lateur, Max Maischein, Anno Siegel, and Michael Schwern.
David Oswald davido@cpan.org
davido@cpan.org
Copyright (c) 2019 David Oswald <davido@cpan.org>.
<davido@cpan.org>
Based on a fork from parent, which is maintained by Max Maischein <corion@cpan.org>, and was introduced to the Perl core with Perl 5.10.1.
<corion@cpan.org>
This module is released under the same terms as Perl itself.
To install parent::versioned, copy and paste the appropriate command in to your terminal.
cpanm
cpanm parent::versioned
CPAN shell
perl -MCPAN -e shell install parent::versioned
For more information on module installation, please visit the detailed CPAN module installation guide.