use strict; use warnings; use Data::Dumper; my @table_1 = ( # A B C [ 1, 1, 1 ], [ 1, 0, 2 ], [ 0, 1, 3 ], ); my @table_2 = ( # A P Q R [ 1, 1, 0, 1 ], [ 1, 0, 1, 0 ], [ 0, 0, 0, 1,], ); my @table_3; foreach my $row_of_1 (@table_1) { foreach my $row_of_2 (@table_2) { if ( $row_of_1->[0] == $row_of_2->[0] ) { push @table_3, [@{$row_of_1}[1..2],@{$row_of_2}[1..3]]; } } } print Dumper \@table_3;