1#!./perl 2 3BEGIN { 4 chdir 't'; 5 require './test.pl'; 6 set_up_inc("../lib"); 7} 8 9push @subs, sub :const{$_} for 1..10; 10is join(" ", map &$_, @subs), "1 2 3 4 5 6 7 8 9 10", 11 ':const capturing global $_'; 12 13my $x = 3; 14my $sub = sub : const { $x }; 15$x++; 16is &$sub, 3, ':const capturing lexical'; 17 18$x = 3; 19$sub = sub : const { $x+5 }; 20$x++; 21is &$sub, 8, ':const capturing expression'; 22 23is &{sub () : const { 42 }}, 42, ':const with truly constant sub'; 24 25*foo = $sub; 26{ 27 use warnings 'redefine'; 28 my $w; 29 local $SIG{__WARN__} = sub { $w .= shift }; 30 *foo = sub (){}; 31 like $w, qr/^Constant subroutine main::foo redefined at /, 32 ':const subs are constant'; 33} 34 35eval 'sub bar : const'; 36like $@, qr/^:const is not permitted on named subroutines at /, 37 ':const on named stub'; 38eval 'sub baz : const { }'; 39like $@, qr/^:const is not permitted on named subroutines at /, 40 ':const on named sub'; 41 42done_testing; 43