#!/usr/bin/perl -wall use strict; #=-=-=-=- require Exporter; package Foo; our @ISA = qw(Exporter); use threads; use threads::shared; use Thread::Queue; sub new { my $class = shift; my $self = {key1 => 'value1', key2 => 'value2'}; share($self); bless($self, $class); return $self; } #=-=-=-=- package Bar; use threads; use threads::shared; use Thread::Queue; my $q = new Thread::Queue; my $thr = threads->new(\&monitorQueue); # Add a reference to an empty hash. my $hash_ref_0 = {}; print "\$hash_ref_0 is a " . ref($hash_ref_0); &share($hash_ref_0); $q->enqueue($hash_ref_0); # Add a reference to a hash with something in it. my $hash_ref_1 = {keyM => "valueM", keyN => "valueN"}; print "\$hash_ref_1 is a " . ref($hash_ref_1); &share($hash_ref_1); # Try sharing the reference. share(%$hash_ref_1); # Try sharing the referant. share($hash_ref_1->{$_}) foreach(keys %$hash_ref_1); # Try sharing all elements of the referant. $q->enqueue($hash_ref_1); # Add a blessed reference to a hash with something in it. my $hash_ref_2 = new Foo(); print "\$hash_ref_2 is a " . ref($hash_ref_2); &share($hash_ref_2); $q->enqueue($hash_ref_2); $thr->join; sub monitorQueue { while (my $elem = $q->dequeue) { print "Removed $elem from queue"; printHashRef($elem); } } sub printHashRef { my $rhash = shift; print "Key: '$_'\t\tValue: '$rhash->{$_}'" foreach(sort keys %$rhash); }