use strict; use warnings; my %hash = ( 1 => { a => { i => 'level 3', ii => 'level 3', iii => 'level 3', }, b => { i => 'level 3', ii => 'level 3', iii => 'level 3', }, }, 2 => {a => 'level2', b => 'level2'}, 3 => 'level 1', 4 => 'level 1', ); print dumpHash(\%hash); sub dumpHash { my ($element, $indent) = @_; $indent ||= ''; return "$indent$element\n" unless 'HASH' eq ref $element; my $str= ''; for my $key (sort keys %$element) { $str .= "$indent$key =>\n"; $str .= dumpHash ($element->{$key}, $indent . ' '); } return $str; } #### 1 => a => i => level 3 ii => level 3 iii => level 3 b => i => level 3 ii => level 3 iii => level 3 2 => a => level2 b => level2 3 => level 1 4 => level 1