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 )