1#! perl 2 3use strict; 4use warnings; 5 6use Test::More 0.89; 7 8local $SIG{__WARN__} = sub { fail("Got unexpected warning"); diag($_[0]) }; 9 10if ($] >= 5.010000) { 11 is (eval <<'END', 1, 'state compiles') or diag $@; 12 use experimental 'state'; 13 state $foo = 1; 14 is($foo, 1, '$foo is 1'); 15 1; 16END 17} 18 19if ($] >= 5.010001) { 20 if (eval ' 21 no warnings "experimental"; 22 use feature "switch"; 23 if(0) { when(3) {} } 24 1; 25 ') { 26 is (eval <<'END', 1, 'switch compiles') or diag $@; 27 use experimental 'switch'; 28 sub bar { 1 }; 29 given(1) { 30 when (\&bar) { 31 pass("bar matches 1"); 32 } 33 default { 34 fail("bar matches 1"); 35 } 36 } 37 1; 38END 39 } else { 40 is (eval <<'END', 1, 'switch compiles') or diag $@; 41 use experimental 'switch'; 42 sub bar { 1 }; 43 given(1) { 44 whereso (\&bar) { 45 pass("bar matches 1"); 46 } 47 fail("bar matches 1"); 48 } 49 1; 50END 51 } 52} 53 54if ($] >= 5.010001) { 55 is (eval <<'END', 1, 'smartmatch compiles') or diag $@; 56 use experimental 'smartmatch'; 57 { package Baz; use overload "~~" => sub { 1 }; } 58 is(1 ~~ bless({}, "Baz"), 1, "is 1"); 59 1; 60END 61} 62 63if ($] >= 5.018) { 64 is (eval <<'END', 1, 'lexical subs compiles') or diag $@; 65 use experimental 'lexical_subs'; 66 my sub foo { 1 }; 67 is(foo(), 1, "foo is 1"); 68 1; 69END 70} 71 72if ($] >= 5.026000) { 73 is (eval <<'END', 1, 'declared refs compiles') or diag $@; 74 use experimental 'declared_refs'; 75 my @b; 76 my \@a = \@b; 77 is(\@a, \@b, '@a and @b are the same after \@a=\@b'); 78 1; 79END 80} 81elsif ($] >= 5.021005) { 82 is (eval <<'END', 1, 'ref aliasing compiles') or diag $@; 83 use experimental 'refaliasing'; 84 my (@a, @b); 85 \@a = \@b; 86 is(\@a, \@b, '@a and @b are the same after \@a=\@b'); 87 1; 88END 89} 90 91done_testing; 92 93