my $o = bless { a => 'A', b => 'B' }, "CLASS" ; show('main - pre ', $o) ; my $t = threads->new(\&proc, 'thread', $o) ; $t->join() ; show('main - post', $o) ; sub proc { my ($t, $x) = @_ ; $$x{z} = 'Z' ; show($t, $x) ; } ; sub show { my ($t, $x) = @_ ; printf "%20s: ", $t ; print "$x {", join(", ", map { "$_ => $$x{$_}" } sort keys %$x), "}\n" ; } ; #### main - pre : CLASS=HASH(0x15c2e88) {a => A, b => B} thread: CLASS=HASH(0x1adee98) {a => A, b => B, z => Z} main - post: CLASS=HASH(0x15c2e88) {a => A, b => B} #### my %s : shared = ( x => 'X', y => 'Y' ) ; my $o = bless \%s, "SHARE" ; #### main - pre : SHARE=HASH(0x15c4778) {x => X, y => Y} thread: SHARE=HASH(0x1825950) {x => X, y => Y, z => Z} main - post: SHARE=HASH(0x15c4778) {x => X, y => Y, z => Z} #### my $t = threads->new(\&make, a => 'A', b => 'B') ; my $o = $t->join() ; show('main', $o) ; sub make { my %s : shared = @_ ; my $m : shared = bless \%s, "MADE" ; show('thread', $m) ; return $m ; } ; use Scalar::Util qw(reftype) ; sub show { my ($t, $x) = @_ ; printf "%20s: %s", $t, $x ; my $r = reftype($x) || '' ; if ($r eq 'SCALAR') { print " = ", defined($$x) ? "'$$x'" : 'undef' ; } ; if ($r eq 'ARRAY') { print " = [", join(", ", @$x), "]" ; } ; if ($r eq 'HASH') { print " = {", join(", ", map { "$_ => $$x{$_}" } sort keys %$x), "}" ; } ; print "\n" ; } ; #### thread: MADE=HASH(0x197d4e0) = {a => A, b => B} main: SCALAR(0x1712078) = undef