File Coverage

blib/lib/Modern/Perl.pm
Criterion Covered Total %
statement 48 52 92.3
branch 13 20 65.0
condition 0 6 0.0
subroutine 12 12 100.0
pod 0 2 0.0
total 73 92 79.3


line stmt bran cond sub pod time code
1             package Modern::Perl;
2             # ABSTRACT: enable all of the features of Modern Perl with one import
3             $Modern::Perl::VERSION = '1.20250607';
4 5     5   397944 use 5.010_000;
  5         25  
5              
6 5     5   35 use strict;
  5         24  
  5         155  
7 5     5   23 use warnings;
  5         22  
  5         308  
8              
9 5     5   49 use mro ();
  5         7  
  5         99  
10 5     5   31 use feature ();
  5         16  
  5         104  
11              
12             # enable methods on filehandles; unnecessary when 5.14 autoloads them
13 5     5   2585 use IO::File ();
  5         50294  
  5         167  
14 5     5   61 use IO::Handle ();
  5         11  
  5         776  
15              
16             my $wanted_date;
17              
18             sub VERSION {
19 2     2 0 278 my ($self, $version) = @_;
20              
21 2         4 my $default = 2025;
22              
23 2 50 0     7 return $Modern::Perl::VERSION || $default unless defined $version;
24 2 50 0     5 return $Modern::Perl::VERSION || $default if $version < 2009;
25              
26 2 50       17 $wanted_date = $version if (caller(1))[3] =~ /::BEGIN/;
27 2         5 return $default;
28             }
29              
30             my $unimport_tag;
31             BEGIN {
32 5 50   5   2211 $unimport_tag = $] > 5.015 ? ':all' : ':5.10';
33             }
34              
35             sub import {
36 12     12   390539 my ($class, $date) = @_;
37 12 100       49 $date = $wanted_date unless defined $date;
38              
39 12         44 my $feature_tag = validate_date( $date );
40 11         23 undef $wanted_date;
41              
42 11         379 warnings->import;
43 11         94 strict->import;
44 11         2006 feature->unimport( $unimport_tag );
45 11         570 feature->import( $feature_tag );
46              
47 11 50       51 if ($feature_tag ge ':5.34') {
48 0         0 feature->import( 'signatures' );
49 0         0 warnings->unimport( 'experimental::signatures' );
50             }
51              
52 11 50       29 if ($feature_tag ge ':5.38') {
53 0         0 feature->import( 'module_true' );
54             }
55              
56 11         8603 mro::set_mro( scalar caller(), 'c3' );
57             }
58              
59             sub unimport {
60 1     1   37 warnings->unimport;
61 1         8 strict->unimport;
62 1         2295 feature->unimport;
63             }
64              
65             sub validate_date {
66 12     12 0 229 my %dates = (
67             2009 => ':5.10',
68             2010 => ':5.10',
69             2011 => ':5.12',
70             2012 => ':5.14',
71             2013 => ':5.16',
72             2014 => ':5.18',
73             2015 => ':5.20',
74             2016 => ':5.24',
75             2017 => ':5.24',
76             2018 => ':5.26',
77             2019 => ':5.28',
78             2020 => ':5.30',
79             2021 => ':5.32',
80             2022 => ':5.34',
81             2023 => ':5.36',
82             2024 => ':5.38',
83             2025 => ':5.40',
84             );
85              
86 12         30 my $date = shift;
87              
88             # always enable unicode_strings when available
89 12 100       37 unless ($date) {
90 7 50       55 return ':5.12' if $] > 5.011003;
91 0         0 return ':5.10';
92             }
93              
94 5         15 my $year = substr $date, 0, 4;
95 5 100       35 return $dates{$year} if exists $dates{$year};
96              
97 1         41 die "Unknown date '$date' requested\n";
98             }
99              
100              
101             1;
102              
103             __END__