12 my($object, $package, $type) = @_;
13 print "# $object $package $type\n";
14 is(ref($object), $package);
15 my $r = qr/^\Q$package\E=(\w+)\(0x([0-9a-f]+)\)$/;
17 if ("$object" =~ $r) {
19 # in 64-bit platforms hex warns for 32+ -bit values
20 cmp_ok(do {no warnings 'portable'; hex($2)}, '==', $object);
27 # test blessing simple types
30 expected($a1, "A", "HASH");
32 expected($b1, "B", "ARRAY");
33 $c1 = bless \(map "$_", "test"), "C";
34 expected($c1, "C", "SCALAR");
35 our $test = "foo"; $d1 = bless \*test, "D";
36 expected($d1, "D", "GLOB");
37 $e1 = bless sub { 1 }, "E";
38 expected($e1, "E", "CODE");
40 expected($f1, "F", "REF");
41 $g1 = bless \substr("test", 1, 2), "G";
42 expected($g1, "G", "LVALUE");
44 # blessing ref to object doesn't modify object
46 expected(bless(\$a1, "F"), "F", "REF");
47 expected($a1, "A", "HASH");
49 # reblessing does modify object
52 expected($a1, "A2", "HASH");
56 local $a1 = bless $a1, "A3"; # should rebless outer $a1
57 local $b1 = bless [], "B3";
58 my $c1 = bless $c1, "C3"; # should rebless outer $c1
59 our $test2 = ""; my $d1 = bless \*test2, "D3";
60 expected($a1, "A3", "HASH");
61 expected($b1, "B3", "ARRAY");
62 expected($c1, "C3", "SCALAR");
63 expected($d1, "D3", "GLOB");
65 expected($a1, "A3", "HASH");
66 expected($b1, "B", "ARRAY");
67 expected($c1, "C3", "SCALAR");
68 expected($d1, "D", "GLOB");
72 expected(bless({}, $1), "E", "HASH");
76 $! = 2; # attempt to avoid cached string
78 expected(bless({}, $!), $string, "HASH");
84 sub test { main::is(${$_[0]}, $string) }
94 ### example of magic variable that is a reference??
96 # no class, or empty string (with a warning), or undef (with two)
97 expected(bless([]), 'main', "ARRAY");
99 local $SIG{__WARN__} = sub { push @w, join '', @_ };
103 expected($m, 'main', "ARRAY");
108 expected($m, 'main', "ARRAY");
112 $m = bless [], undef;
113 expected($m, 'main', "ARRAY");
118 $a1 = bless {}, "A4";
119 $b1 = eval { bless {}, $a1 };
120 isnt ($@, '', "class is a ref");
122 # class is an overloaded ref
125 use overload '""' => sub { "C4" };
127 $h1 = bless {}, "H4";
128 $c4 = eval { bless \$test, $h1 };
129 is ($@, '', "class is an overloaded ref");
130 expected($c4, 'C4', "SCALAR");
139 my $a = bless \(keys %h), 'zap';
144 ok(1, 'blessing into main:: does not crash'); # [perl #87388]
146 sub _117941 { package _117941; bless [] }
147 delete $::{"_117941::"};
149 like $@, qr/^Attempt to bless into a freed package at /,
150 'bless with one arg when current stash is freed';