sub grep2d { my($ar, $el) = @_; grep { grep $el == $_, @$_ } @$ar; } use Data::Dumper; my $array = [ [ 1 .. 3 ], [ 4 .. 5 ], [ 3 .. 5 ] ]; print Dumper( grep2d($array, 3) ); __output__ $VAR1 = [ 1, 2, 3 ]; $VAR2 = [ 3, 4, 5 ];