http://www.perlmonks.org?node_id=494264

convert an array of hash(ref)s to an array of array(ref)s, with the first array being the key values. it is assumed that the array of hashes is uniform in terms of keys, although they dont have to be. the keys can optionally be specified.
use strict; use warnings; use Data::Dumper; my $aoh = [ { a => 'yabba', b => 'dabba', c => 'do', }, { a => "what's", b => 'up', c => 'doc', }, { a => 'to', b => 'the', c => 'moon', d => 'alice!', }, ]; my @aoa = convert_aoh_aoa($aoh); print Dumper \@aoa; @aoa = convert_aoh_aoa($aoh,[qw/c b d/]); print Dumper \@aoa; sub convert_aoh_aoa { my $aoh = shift; my $col_names = shift || [sort keys %{$aoh->[0]}]; return ( $col_names, map { [@$_{@$col_names}] } @$aoh ); } __END__ $VAR1 = [ [ 'a', 'b', 'c' ], [ 'yabba', 'dabba', 'do' ], [ 'what\'s', 'up', 'doc' ], [ 'to', 'the', 'moon' ] ]; $VAR1 = [ [ 'c', 'b', 'd' ], [ 'do', 'dabba', undef ], [ 'doc', 'up', undef ], [ 'moon', 'the', 'alice!' ] ];