На самом деле, вы почти получили правильное выражение: единственное, что вам нужно сделать, это экранировать .
с обратной косой чертой (поскольку .
означает «любой символ, кроме символа новой строки» в регулярных выражениях) и это также поможет поместить ?:
в скобки (так как вам не нужно фиксировать расширение файла). Кроме того, ^
и $
обозначают маркеры для начала и конца строки (поэтому мы сопоставляем всю строку, а не только часть строки ... таким образом, мы не получаем соответствия для имя файла "thisisnotfoo.txt"
)
Как-то так должно работать:
use strict;
use warnings;
my $file1="foo.txt";
my $file2="foo.abc";
my $file3="some_other_file";
foreach ($file1,$file2,$file3)
{
if(/^foo\.(?:txt|abc)$/)
{
print "$_\n";
}
}
Когда выполняется приведенный выше код, вывод:
foo.txt
foo.abc
Посмотрите на perldoc perlretut
, чтобы узнать больше о регулярных выражениях.