Modern-Perl
view release on metacpan or search on metacpan
lib/Modern/Perl.pm view on Meta::CPAN
package Modern::Perl;
# ABSTRACT: enable all of the features of Modern Perl with one import
$Modern::Perl::VERSION = '1.20250607';
use 5.010_000;
use strict;
use warnings;
use mro ();
use feature ();
# enable methods on filehandles; unnecessary when 5.14 autoloads them
use IO::File ();
use IO::Handle ();
my $wanted_date;
sub VERSION {
my ($self, $version) = @_;
my $default = 2025;
return $Modern::Perl::VERSION || $default unless defined $version;
return $Modern::Perl::VERSION || $default if $version < 2009;
$wanted_date = $version if (caller(1))[3] =~ /::BEGIN/;
return $default;
}
my $unimport_tag;
BEGIN {
$unimport_tag = $] > 5.015 ? ':all' : ':5.10';
}
sub import {
my ($class, $date) = @_;
$date = $wanted_date unless defined $date;
my $feature_tag = validate_date( $date );
undef $wanted_date;
warnings->import;
strict->import;
feature->unimport( $unimport_tag );
feature->import( $feature_tag );
if ($feature_tag ge ':5.34') {
feature->import( 'signatures' );
warnings->unimport( 'experimental::signatures' );
}
if ($feature_tag ge ':5.38') {
feature->import( 'module_true' );
}
mro::set_mro( scalar caller(), 'c3' );
}
sub unimport {
warnings->unimport;
strict->unimport;
feature->unimport;
}
sub validate_date {
my %dates = (
2009 => ':5.10',
2010 => ':5.10',
2011 => ':5.12',
2012 => ':5.14',
2013 => ':5.16',
2014 => ':5.18',
2015 => ':5.20',
2016 => ':5.24',
2017 => ':5.24',
2018 => ':5.26',
2019 => ':5.28',
2020 => ':5.30',
2021 => ':5.32',
2022 => ':5.34',
2023 => ':5.36',
2024 => ':5.38',
2025 => ':5.40',
);
my $date = shift;
# always enable unicode_strings when available
unless ($date) {
return ':5.12' if $] > 5.011003;
return ':5.10';
}
my $year = substr $date, 0, 4;
return $dates{$year} if exists $dates{$year};
die "Unknown date '$date' requested\n";
}
1;
__END__
( run in 2.859 seconds using v1.01-cache-2.11-cpan-8f98c5d2c55 )