-e
ожидает имя файла, а не регулярное выражение. Вы не показали, что внутри $_
, поэтому мы не можем комментировать, что не так с первой командой.
Вы можете использовать glob для расширения шаблона (переключитесь на File::Glob::bsd_glob
, если $ regr может содержать пробел):
for (@array) {
my @files = glob "$regr/$_.*";
print "Found @files";
}
Вы можете использовать grep для фильтрации имен по регулярному выражению:
if (my @files = grep /\.[0-9]+$/, glob "$regr/$_.*") {
print "Found @files.\n" if -e $files[0];
}