1use strict; 2use warnings; 3use lib 't/lib'; 4use Test::More; 5use Test::Fatal; 6 7use B; 8use Package::Stash; 9use Scalar::Util qw(reftype); 10use Symbol; 11 12my $Bar = Package::Stash->new('Bar'); 13 14my $pviv = 3; 15$pviv =~ s/3/4/; 16isa_ok(B::svref_2object(\$pviv), 'B::PVIV'); 17is(exception { $Bar->add_symbol('$pviv', \$pviv) }, undef, 18 "can add PVIV values"); 19 20my $pvnv = 4.5; 21$pvnv =~ s/4/5/; 22isa_ok(B::svref_2object(\$pvnv), 'B::PVNV'); 23is(exception { $Bar->add_symbol('$pvnv', \$pvnv) }, undef, 24 "can add PVNV values"); 25 26my $pvmg = "foo"; 27bless \$pvmg, 'Foo'; 28isa_ok(B::svref_2object(\$pvmg), 'B::PVMG'); 29is(exception { $Bar->add_symbol('$pvmg', \$pvmg) }, undef, 30 "can add PVMG values"); 31 32my $regexp = qr/foo/; 33isa_ok(B::svref_2object($regexp), ($] < 5.012 ? 'B::PVMG' : 'B::REGEXP')); 34is(exception { $Bar->add_symbol('$regexp', $regexp) }, undef, 35 "can add REGEXP values"); 36 37my $pvgv = Symbol::gensym; 38isa_ok(B::svref_2object($pvgv), 'B::GV'); 39isnt(exception { $Bar->add_symbol('$pvgv', $pvgv) }, undef, 40 "can't add PVGV values"); 41 42my $pvlv = "foo"; 43isa_ok(B::svref_2object(\substr($pvlv, 0, 1)), 'B::PVLV'); 44is(exception { $Bar->add_symbol('$pvlv', \substr($pvlv, 0, 1)) }, undef, 45 "can add PVLV values"); 46 47my $vstring = v1.2.3; 48is(reftype(\$vstring), ($] < 5.010 ? 'SCALAR' : 'VSTRING')); 49is(exception { $Bar->add_symbol('$vstring', \$vstring) }, undef, 50 "can add vstring values"); 51 52done_testing; 53