use Data::Dumper; { my $data = [[0,1,2,3,4,5], [1,2,3,4,5,6], [2,3,4,5,6,7], [3,4,5,6,7,8], [4,5,6,7,8,9], [5,6,7,8,9,10]]; my $i = 0; my $rows = [ map { my $row = $_; (++ $i % 2) ? { ODD => [ map { {VALUE => $_} } @{$row} ] } : { EVEN => [ map { {VALUE => $_} } @{$row} ] } } @{$data} ]; print Dumper($rows); } { my $data = [[0,1,2,3,4,5], [1,2,3,4,5,-6], [2,3,4,5,6,7], [3,4,5,6,7,8], [4,5,6,7,8,9], [5,6,7,8,9,10]]; my $rows = [ map { my $row = $_; (@{$row}[5]>= 0) ? { ODD => [ map { {VALUE => $_} } @{$row} ] } : { EVEN => [ map { {VALUE => $_} } @{$row} ] } } @{$data} ]; print Dumper($rows); }