Я думал @ikegami выдал довольно хороший ответ, НО, он, кажется, чтобы получить ошибки в том, что массив для печати ... Может @ user2249959 хочет массив @exome не для печати ... основной код нужен не больше, чем две строки:
my $grep_pos = join '|', @pos;
my @matched_results = grep { /$grep_pos/ } @exome;
Ну, вы можете распечатать сразу на второй линии, но не будет иметь пустое пространство между элементами в массив. Две петли foreach не похожи на Perl, только по моему мнению ...
P.S. Я добавил три очка, чтобы обратить внимание
1. Будьте осторожны с невидимыми «\ n» или «\ r \ n»
2. Будьте осторожны с белым пространством в начале и конце каждой строки.
Вы можете решить вышеуказанные две точки с простыми кодами, например:
map { chomp; s/^\s*|\s*$// } @pos;
Это приведет к удалению «\ п» (если есть), и белые пространства впереди или в конце (если предположить, что бессмысленно). Сделайте это перед grep
3. БОЛЬШЕ ВАЖНО! Будьте осторожны с пустыми строками в файле массива @pos!
Если ваш файл выглядит следующим образом:
pos_1
pos_2
<---- totally blank
pos_3
Если вы все-таки присоединиться к линии вместе с «|», он станет «pos_1 | pos_2 || pos_3», это означает, что что-то в @exome будет соответствовать. (Из-за «||»)
Chomp или с /// не поможет, вы должны прыгать эту линию самостоятельно
Просто будьте осторожны :)
Что ваш вопрос? – mob
@JoeFrambach: Это не вопрос. Какой у Вас вопрос? – Borodin