#!/usr/bin/perl use warnings; use strict; use Data::Dumper; my $data1 = [ { 'NAME' => 'PAUL DY', 'DATE' => '2009-05-05', 'NUMBER' => '00001', }, { 'NAME' => 'ANTHONY RD', 'DATE' => '2012-01-07', 'NUMBER' => '00003', }, ]; my $data2 = [ { 'CAR1' => '1', 'CAR2' => '2', 'CAR3' => '3', }, { 'CAR1' => '1b', 'CAR2' => '2b', 'CAR3' => '3b', }, ]; my @results; for my $data1_href (@$data1){ my %current_row; for my $entry (qw(name date number)){ $current_row{$entry} = $data1_href->{uc($entry)}; } my $data2_href = shift(@$data2); for my $entry (qw(car1 car2 car3)){ $current_row{$entry} = $data2_href->{uc($entry)}; } push @results, \%current_row; } print Dumper \@results;