Codebase list libexperimental-perl / ef833bb
Support attaching additional features Leon Timmermans 10 years ago
3 changed file(s) with 13 addition(s) and 5 deletion(s). Raw diff Collapse all Expand all
11
22 {{$NEXT}}
33 Hard require 5.010
4 Support attaching additional features
45
56 0.005 2013-06-09 00:40:53 Europe/Amsterdam
67 Grandfathered lexical_topic
00 package experimental;
1
12 use strict;
23 use warnings;
34
1314 array_base => 5
1415 );
1516
17 my %additional_features = (
18 );
19
1620 sub import {
1721 my ($self, @pragmas) = @_;
1822
1923 for my $pragma (@pragmas) {
2024 if ($warnings{"experimental::$pragma"}) {
2125 warnings->unimport("experimental::$pragma");
22 feature->import($pragma) if $features{$pragma};
26 my @features = grep { $features{$_} } $pragma, @{ $additional_features{$pragma} || [] };
27 feature->import(@features) if @features;
2328 }
2429 elsif ($features{$pragma}) {
2530 feature->import($pragma);
31 feature->import(@{ $additional_features{$pragma} }) if $additional_features{$pragma};
2632 }
2733 elsif (not $grandfathered{$pragma}) {
2834 croak "Can't enable unknown feature $pragma";
4046 for my $pragma (@pragmas) {
4147 if ($warnings{"experimental::$pragma"}) {
4248 warnings->import("experimental::$pragma");
43 feature->unimport($pragma) if $features{$pragma};
49 feature->unimport(grep { $features{$_} } $pragma, @{ $additional_features{$pragma} || [] });
4450 }
4551 elsif ($features{$pragma}) {
4652 feature->unimport($pragma);
53 feature->unimport(@{ $additional_features{$pragma} }) if $additional_features{$pragma};
4754 }
4855 elsif (not $grandfathered{$pragma}) {
4956 carp "Can't disable unknown feature $pragma, ignoring";
44 local $SIG{__WARN__} = sub { fail("Got unexpected warning"); diag($_[0]) };
55
66 if ($] >= 5.010000) {
7 is (eval <<'END', 1, 'lexical topic compiles');
7 is (eval <<'END', 1, 'lexical topic compiles') or diag $@;
88 use experimental 'lexical_topic';
99 my $_ = 1;
1010 is($_, 1, '$_ is 1');
1515 }
1616
1717 if ($] >= 5.010001) {
18 is (eval <<'END', 1, 'smartmatch compiles');
18 is (eval <<'END', 1, 'smartmatch compiles') or diag $@;
1919 use experimental 'smartmatch';
2020 sub bar { 1 };
2121 is(1 ~~ \&bar, 1, "is 1");
2323 }
2424
2525 if ($] >= 5.018) {
26 is (eval <<'END', 1, 'lexical subs compiles');
26 is (eval <<'END', 1, 'lexical subs compiles') or diag $@;
2727 use experimental 'lexical_subs';
2828 my sub foo { 1 };
2929 is(foo(), 1, "foo is 1");