#! perl -slw use strict; use threads; use threads::shared; use Data::Dumper; $Data::Dumper::Indent = 0; my %hash : shared; my $running : shared = 0; sub thread { $running++; for my $mainKey ( 1 .. 10 ) { my %subhash : shared = map { my %subsubhash : shared = map{; ( "foo$_" , "bar$_" ) } 1 .. 4; \%subsubhash; } 1 .. 4; { lock %hash; $hash{ $mainKey } = \%subhash; } sleep 1; } $running--; } my $thread = threads->new( \&thread ); sleep 1 until $running; while( $running ) { print Dumper \%hash; sleep 1; } $thread->join;