# Prototype defined to avoid 'function not defined' warnings # on compilation. sub unpack_row($@); sub unpack_row($@){ my $hash = shift(@_); my @row = @_; if(ref($hash) eq 'HASH'){ my $header = $hash->{'header'}; while(my ($key, $value) = each(%$hash)){ unpack_row($value, (@row, $key)); } } else { print Dumper((@row, $hash)); return (@row, $hash); } } my $hash = {}; $hash->{'foo'}->{'bar'}->{'bat'} = 5; print unpack_row($hash, ());