$table=[[1,2,3],[a,b,d],[A,D,C]]; #### @answers = grep { $_->[0] =~ /a/i && $_->[2] =~ /C/} @$table; #### %search_elements=(0=>a,2=>C); @answers = grep { scan($_,\%search_elements) } @$table; sub scan { my($row,$refToArgsHash)=@_; foreach (keys %$refToArgsHash) { unless($row->[$_] =~ /$refToArgsHash->{$_}/i) { return 0; #fail } } return 1; # ok all match }