$VAR1 = { '12349' => [ { 'name' => 'RIC', 'reference' => '00y77676', } ], 'X334' => [ { 'name' => 'MES', 'reference' => '0089kkjh9', } ], 'U7564' => [ { 'name' => 'CHAMV', 'reference' => '00gt6544', } ], 'Q234' => [ { 'name' => 'INGTON', 'reference' => '0099ytr', } ], 'K988777' => [ { 'name' => 'LOE', 'reference' => '9887hhh', }, { 'name' => 'TYL', 'reference' => '00ttr54433', }, { 'name' => 'TLYN', 'reference' => '099iuuy7', }, { 'name' => 'LEEN', 'reference' => '0yy76767', }, { 'name' => 'TSY', 'reference' => '00hyu65', }, { 'name' => 'ASTCIA', 'reference' => '0dree4333', }, { 'name' => 'IRNDA', 'reference' => '99877uuug', } ], 'P99987' => [ { 'name' => 'JOSPH', 'reference' => '0gft5210', } ], }; process(\%thedata); sub process { my $all = shift; my %run_all = %$all; foreach my $key (keys %run_all){ print "$key\n"; foreach my $entry (@{$run_all{$key}}) { print "$entry\n"; } print "\n"; } }