use Version::Easy;
$VERSION = 'v1.2.3'; # v-str
# or...
$VERSION = '1.002003'; # float
$VERSION = 'v1.2.3_4'; # v-str + alpha
$VERSION = '1.002003_4'; # float + alpha
####
use strict;
use warnings;
# --------------------------------------------------
package Version::Easy;
use Data::Dump qw/pp dd/;
use version;
sub import {
my $pkg = (caller)[0];
my $version;
tie $version, 'Version::Easy::Tie';
no strict 'refs';
*{${pkg}."::VERSION"} = \$version;
}
# --------------------------------------------------
package Version::Easy::Tie;
require Tie::Scalar;
our @ISA = qw(Tie::StdScalar);
use version qw/is_lax/;
sub STORE {
my ($self,$value)= @_;
warn "IN:\t\t",$value;
if ( is_lax($value) ) {
$$self = version->parse($value);
} else {
warn "corrupt VERSION format $value";
}
}
# BUG? perldoc Tie::Scalar says no TIESCALAR needed
sub TIESCALAR {
my $class = shift;
my $version;
return bless \$version, $class;
}
1;
# --------------------------------------------------
# --- fake already required for 'use' demo
BEGIN {
$INC{'Version/Easy.pm'} = 1;
}
# --------------------------------------------------
#
# DEMO
#
#
package TST;
use Version::Easy;
# --------- test v-str
$VERSION = 'v1.2.3';
warn "Str:\t" ,$VERSION;
warn "Float:\t" ,$VERSION->numify;
warn "V-str:\t" ,$VERSION->normal;
my $v1 = $VERSION;
# --------- test float
$VERSION = '1.002003';
warn "Str:\t" ,$VERSION;
warn "Float:\t" ,$VERSION->numify;
warn "V-str:\t" ,$VERSION->normal;
my $v2 = $VERSION;
warn "Are both Version equal?:", $v1 == $v2;
warn "v-str bigger?:", $v1 > 'v1.2.2';
warn "v-str smaller?:", $v1 < 'v1.2.4';
warn "v-str not smaller?:", $v1 < 'v1.2.2';
#
# --------------------------------------------------
##
##
-*- mode: compilation; default-directory: "d:/exp/" -*-
Compilation started at Fri Jul 10 19:13:58
C:/Perl_524/bin\perl.exe d:/exp/Version_Easy.pl
IN: v1.2.3 at d:/exp/Version_Easy.pl line 29.
Str: v1.2.3 at d:/exp/Version_Easy.pl line 69.
Float: 1.002003 at d:/exp/Version_Easy.pl line 70.
V-str: v1.2.3 at d:/exp/Version_Easy.pl line 71.
IN: 1.002003 at d:/exp/Version_Easy.pl line 29.
Str: 1.002003 at d:/exp/Version_Easy.pl line 78.
Float: 1.002003 at d:/exp/Version_Easy.pl line 79.
V-str: v1.2.3 at d:/exp/Version_Easy.pl line 80.
Are both Version equal?:1 at d:/exp/Version_Easy.pl line 84.
v-str bigger?:1 at d:/exp/Version_Easy.pl line 86.
v-str smaller?:1 at d:/exp/Version_Easy.pl line 87.
v-str not smaller?: at d:/exp/Version_Easy.pl line 88.
Compilation finished at Fri Jul 10 19:13:58