Mac-OSVersion-Lite
view release on metacpan - search on metacpan
view release on metacpan or search on metacpan
lib/Mac/OSVersion/Lite.pm view on Meta::CPAN
package Mac::OSVersion::Lite;
use strict;
use warnings;
use utf8;
our $VERSION = "0.10";
use constant VERSION_FORMAT => qr/(?<major>[0-9]+)(?:\.(?<minor>[0-9]+))?(?:\.(?<point>[0-9]+))?/;
use constant MAC_VERSION_NAMES => {
catalina => "10.15",
mojave => "10.14",
high_sierra => "10.13",
sierra => "10.12",
el_capitan => "10.11",
yosemite => "10.10",
mavericks => "10.9",
mountain_lion => "10.8",
lion => "10.7",
snow_leopard => "10.6",
leopard => "10.5",
tiger => "10.4",
};
use overload (
q{""} => \&as_string,
q{<=>} => \&_cmp,
fallback => 1,
);
sub major { shift->{major} }
sub minor { shift->{minor} }
sub new {
my $class = shift;
my $self = bless {} => $class;
$self->_init_by_current_version if @_ == 0;
$self->_init_by_version_string(@_) if @_ == 1;
$self->_init_by_version_numbers(@_) if @_ >= 2;
return $self;
}
sub _init_by_current_version {
my $self = shift;
my $command = '/usr/bin/sw_vers -productVersion';
my $version = `$command`;
die "Command \`$command\` failed: $version (exit code: $?)\n" if $? != 0;
$self->_init_by_version_string($version);
}
sub _init_by_version_string {
my ($self, $string) = @_;
if (defined MAC_VERSION_NAMES->{$string}) {
$string = MAC_VERSION_NAMES->{$string};
}
die "Invalid format: $string\n" unless $string =~ qr/^@{[VERSION_FORMAT]}$/;
$self->{major} = $+{major};
$self->{minor} = $+{minor} // 0;
}
sub _init_by_version_numbers {
my ($self, $major, $minor) = @_;
$self->{major} = $major // 0;
$self->{minor} = $minor // 0;
}
sub name {
my $self = shift;
my %map = reverse %{ MAC_VERSION_NAMES() };
return $map{$self->as_string};
}
sub as_string {
my $self = shift;
return $self->{major}.'.'.$self->{minor};
}
sub _cmp {
my ($self, $other) = @_;
return $self->{major} <=> $other->{major} if $self->{major} != $other->{major};
return $self->{minor} <=> $other->{minor};
}
1;
__END__
=encoding utf-8
view all matches for this distributionview release on metacpan - search on metacpan
( run in 0.949 second using v1.00-cache-2.02-grep-82fe00e-cpan-1925d2aa809 )