use strict; use warnings; use Data::Dumper; my $rawData = <{ $key } ) { $parsedRecords{ $species }->{ $key } = $value; } elsif ( ref $parsedRecords{ $species }->{ $key } eq q{ARRAY} ) { push @{ $parsedRecords{ $species }->{ $key } }, $value; } else { $parsedRecords{ $species }->{ $key } = [ $parsedRecords{ $species }->{ $key }, $value ]; } } } my $dd = Data::Dumper->new( [ \ %parsedRecords ], [ q{*parsedRecords} ] ); $dd->Indent( 1 ); print $dd->Dumpxs;