7 unshift @INC, '../lib' if -d '../lib';
11 my($object, $package, $type) = @_;
13 ref($object) eq $package
14 && "$object" =~ /^\Q$package\E=(\w+)\(0x([0-9a-f]+)\)$/
18 print "# $object $package $type\n";
22 # test blessing simple types
25 print expected($a1, "A", "HASH"), "ok 1\n";
27 print expected($b1, "B", "ARRAY"), "ok 2\n";
28 $c1 = bless \(map "$_", "test"), "C";
29 print expected($c1, "C", "SCALAR"), "ok 3\n";
30 $d1 = bless \*test, "D";
31 print expected($d1, "D", "GLOB"), "ok 4\n";
32 $e1 = bless sub { 1 }, "E";
33 print expected($e1, "E", "CODE"), "ok 5\n";
35 print expected($f1, "F", "REF"), "ok 6\n";
36 $g1 = bless \substr("test", 1, 2), "G";
37 print expected($g1, "G", "LVALUE"), "ok 7\n";
39 # blessing ref to object doesn't modify object
41 print expected(bless(\$a1, "F"), "F", "REF"), "ok 8\n";
42 print expected($a1, "A", "HASH"), "ok 9\n";
44 # reblessing does modify object
46 $a2 = bless $a1, "A2";
47 print expected($a1, "A2", "HASH"), "ok 10\n";
51 local $a1 = bless $a1, "A3"; # should rebless outer $a1
52 local $b1 = bless [], "B3";
53 my $c1 = bless $c1, "C3"; # should rebless outer $c1
54 my $d1 = bless \*test2, "D3";
55 print expected($a1, "A3", "HASH"), "ok 11\n";
56 print expected($b1, "B3", "ARRAY"), "ok 12\n";
57 print expected($c1, "C3", "SCALAR"), "ok 13\n";
58 print expected($d1, "D3", "GLOB"), "ok 14\n";
60 print expected($a1, "A3", "HASH"), "ok 15\n";
61 print expected($b1, "B", "ARRAY"), "ok 16\n";
62 print expected($c1, "C3", "SCALAR"), "ok 17\n";
63 print expected($d1, "D", "GLOB"), "ok 18\n";
67 print expected(bless({}, $1), "E", "HASH"), "ok 19\n";
71 $! = 2; # attempt to avoid cached string
73 print expected(bless({}, $!), $string, "HASH"), "ok 20\n";
79 sub test { ${$_[0]} eq $string or print "not " }
90 ### example of magic variable that is a reference??
92 # no class, or empty string (with a warning), or undef (with two)
93 print expected(bless([]), 'main', "ARRAY"), "ok 22\n";
95 local $SIG{__WARN__} = sub { push @w, join '', @_ };
99 print expected($m, 'main', "ARRAY"), "ok 23\n";
100 print @w ? "not ok 24\t# @w\n" : "ok 24\n";
104 print expected($m, 'main', "ARRAY"), "ok 25\n";
105 print @w != 1 ? "not ok 26\t# @w\n" : "ok 26\n";
108 $m = bless [], undef;
109 print expected($m, 'main', "ARRAY"), "ok 27\n";
110 print @w != 2 ? "not ok 28\t# @w\n" : "ok 28\n";
114 $a1 = bless {}, "A4";
115 $b1 = eval { bless {}, $a1 };
116 print $@ ? "ok 29\n" : "not ok 29\t# $b1\n";