#! perl use Test::More 0.98; use Modern::Perl (); $SIG{__WARN__} = sub { return if $_[0] =~ /Number found where operator expected/; return if $_[0] =~ /Do you need to predeclare/; return if $_[0] =~ /future reserved word/; warn shift }; eval 'sub { given (0) {} }'; isnt $@, '', 'use Modern::Perl () does not enable switch'; eval 'sub { say 0 }'; isnt $@, '', 'use Modern::Perl () does not enable say'; eval 'state $x;'; isnt $@, '', 'use Modern::Perl () does not enable state'; is uc "\xdf", "\xdf", 'Modern::Perl () does not enable unicode_strings'; { use Modern::Perl 2009; eval 'sub { given (0) {} }'; is $@, '', q|use Modern::Perl 2009 enables switch|; eval 'sub { say 0 }'; is $@, '', q|use Modern::Perl 2009 enables say|; eval 'state $x'; is $@, '', q|use Modern::Perl 2009 enables state|; is uc "\xdf", "\xdf", 'but not unicode_strings'; } { use Modern::Perl 2010; eval 'sub { given (0) {} }'; is $@, '', q|use Modern::Perl 2010 enables switch|; eval 'sub { say 0 }'; is $@, '', q|use Modern::Perl 2010 enables say|; eval 'state $x'; is $@, '', q|use Modern::Perl 2010 enables state|; is uc "\xdf", "\xdf", 'but not unicode_strings'; } if ($] >= 5.012) { eval <<'END_HERE'; use Modern::Perl 2011; eval 'sub { given (0) {} }'; is $@, '', q|use Modern::Perl 2011 enables switch|; eval 'sub { say 0 }'; is $@, '', q|use Modern::Perl 2011 enables say|; eval 'state $x'; is $@, '', q|use Modern::Perl 2011 enables state|; is uc "\xdf", "SS", '2011 enables unicode_strings'; END_HERE } if ($] >= 5.014) { eval <<'END_HERE'; use Modern::Perl 2012; eval 'sub { given (0) {} }'; is $@, '', q|use Modern::Perl 2012 enables switch|; eval 'sub { say 0 }'; is $@, '', q|use Modern::Perl 2012 enables say|; eval 'state $x'; is $@, '', q|use Modern::Perl 2012 enables state|; is uc "\xdf", "SS", '2012 enables unicode_strings'; END_HERE } eval 'sub { given (0) {} }'; isnt $@, "", 'switch feature does not leak out'; eval 'sub { say 0 }'; isnt $@, '', 'say feature does not leak out'; eval 'state $x'; isnt $@, '', 'state feature does not leak out'; is uc "\xdf", "\xdf", 'unicode_strings feature does not leak out'; # RT #80304: warning on Modern::Perl->VERSION() { my $warning = ''; local $SIG{__WARN__} = sub { $warning = shift }; $Modern::Perl::VERSION ||= '1.20121103'; my $version = Modern::Perl->VERSION; like $version, qr/1\.201\d/, 'VERSION() should return version number, given no argument'; is $warning, '', '... without warning about undef argument'; } done_testing;