sub grep2d (&;@) { my $test = shift; grep { grep $test->(), @$_ } @_ } use Data::Dumper; my @array = ( [ 1 .. 3], [ 4 .. 5 ], [ 3 .. 5 ] ); print Dumper grep2d { $_ == 3 } @array;