-sub version_gcmp {
- my ($a, $b) = map { defined() ? $_ : 0 } @_;
-
- for ($a, $b) {
- s/^[._]+//g;
- s/[._]+$//g;
- if (/^([\d.]*\d)\.*(?:_p\.*(\d[\d.]*))?\.*(?:-r(\d+))?$/) {
- $_ = {
- v => [ split /\.+/, $1 ],
- p => [ split /\.+/, $2 || 0 ],
- r => [ $3 || 0 ],
- };
- } else {
- require Carp;
- Carp::croak("Couldn't parse version string '$_'");
- }
- }