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