%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 }