use Clone 'clone' ; my $h = { ... } ; my @dupkeys = qw{ nested1 } ; tie my %result, 'MCE::Shared' ; @result{ @dupkeys } = @{ clone($h) }{ @dupkeys } ; print Dumper( $h ) ; #### use strict; use warnings; use MCE::Hobo; use MCE::Inbox; ## # MCE::Inbox is not yet released on MetaCPAN. It can be used with any # parallel module of choice to include threads. # # Specify mailbox names during construction. Behind the scene, # makes a MCE::Shared->queue object per mailbox. ## my $inbox = MCE::Inbox->new('mngrbox', 'donebox'); MCE::Hobo->init( posix_exit => 1 ); # Workers mce_async { sleep 5; $inbox->send('mngrbox', { ident => 'id1', key => 'value1' }); # do other work, perhaps more send('mngrbox', ...) $inbox->send('donebox', 1); }; mce_async { sleep 1; $inbox->send('mngrbox', { ident => 'id2', key => 'value2' }); # do other work, perhaps another send('mngrbox', ...) $inbox->send('donebox', 1); }; mce_async { $inbox->send('mngrbox', { ident => 'id3', key => 'value3' }); # do other work, perhaps send('mngrbox', ...) in a loop $inbox->send('donebox', 1); }; # Manager while ( my $ret = $inbox->recv('mngrbox') ) { printf "ident: %s, key: %s\n", $ret->{ident}, $ret->{key}; MCE::Hobo->waitone if $inbox->recv_nb('donebox'); # non blocking last unless MCE::Hobo->pending; } #### use strict; use warnings; use MCE::Hobo; MCE::Hobo->init( posix_exit => 1 ); my @hobos; push @hobos, mce_async { sleep 5; return { ident => 1, key => 'value1' }; }; push @hobos, MCE::Hobo->create( sub { sleep 1; return { ident => 2, key => 'value2' }; }); push @hobos, MCE::Hobo->create( sub { my ($ident) = @_; return { ident => $ident, key => 'value3' }; }, 3 ); # MCE::Hobo->waitall; while ( MCE::Hobo->pending ) { my $ret = MCE::Hobo->waitone->join; print "ident: ", $ret->{ident}, ", key: ", $ret->{key}, "\n"; } #### use strict; use warnings; use MCE::Hobo; MCE::Hobo->init( posix_exit => 1, on_finish => sub { my ( $pid, $exit, $ident, $signal, $error, $ret ) = @_; print "ident: $ident, key: ", $ret->{key}, "\n"; } ); MCE::Hobo->create('id1', sub { sleep 5; return { key => 'value1' }; }); MCE::Hobo->create('id2', sub { sleep 1; return { key => 'value2' }; }); MCE::Hobo->create('id3', sub { return { key => 'value3' }; }); # MCE::Hobo->waitall; while ( MCE::Hobo->pending ) { MCE::Hobo->waitone; }