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