$hash = test::this(\%hash); for my $box (keys %{$hash}){ print "this is box $box\n"; for my $par (keys %{$hash{$box}}){ print "this is partition $par\n"; for my $sec (keys %{$hash->{$box}->{$par}}){ print "this is section $sec\n"; } } } #### sub this { $temp = @_; $Dbox = "Dbox"; $DDD = "DDD"; $temp{"Dbox"}= "Dbox"; $temp{Dbox}{$DDD}= "DDD"; for my $box (keys %temp){ print "this is box $box\n"; for my $par (keys %{$temp{$box}}){ print "this is partition $par\n"; for my $sec (keys %{$temp{$box}->{$par}}){ print "this is section $sec\n"; } } } return \%temp; }