... push @$header_row, @$data; print Dumper $header_row; .. #### use strict; use warnings; use Data::Dumper; my $data = _test(); my $header_row; push @$header_row, [ "City Name", "Last Name", "First Name", "Addrress", ], [ "", "", "", "", ]; my @values = qw(CITY LAST_NAME FIRST_NAME ADDRESS); push @{$header_row} => [ map { @{$_}{@values} } map { @{$_} } @{$data} ]; print Dumper $header_row; sub _test { my @data = [ { 'CITY' => 'San Frans', 'LAST_NAME' => 'Doe', 'FIRST_NAME' => 'Jonh', 'ADDRESS' => '100 Main Street', }, ]; return \@data; } #### $VAR1 = [ [ 'City Name', 'Last Name', 'First Name', 'Addrress' ], [ '', '', '', '' ], [ 'San Frans', 'Doe', 'Jonh', '100 Main Street' ] ];