1use strict; 2use warnings; 3use Test::More; 4use Test::Fatal; 5use lib 't/lib'; 6 7use Package::Stash; 8 9BEGIN { 10 plan skip_all => "Anonymous stashes in PP need at least perl 5.14" 11 if $] < 5.014 12 && $Package::Stash::IMPLEMENTATION eq 'PP'; 13} 14 15use Test::Needs 'Package::Anon'; 16use Symbol; 17 18my $anon = Package::Anon->new; 19my $stash = Package::Stash->new($anon); 20my $obj = $anon->bless({}); 21 22{ 23 my $code = sub { 'FOO' }; 24 $stash->add_symbol('&foo' => $code); 25 is($stash->get_symbol('&foo'), $code); 26 is($obj->foo, 'FOO'); 27} 28 29{ 30 $anon->{bar} = \123; 31 32 my $code = $stash->get_symbol('&bar'); 33 is(ref($code), 'CODE'); 34 is($code->(), 123); 35 36 is($obj->bar, 123); 37} 38 39{ 40 $anon->{baz} = -1; 41 42 my $code = $stash->get_symbol('&baz'); 43 is(ref($code), 'CODE'); 44 like( 45 exception { $code->() }, 46 qr/Undefined subroutine \&__ANON__::baz called/ 47 ); 48} 49 50done_testing; 51