При использовании файлов, найденных через readdir
, вам необходимо объединить $dirname
с $filname
, помните, что вы не chdir
'ввели каталог, в котором находятся эти файлы.
open FH, "<", "$dirname/$filname" or die "Cannot open $filname:$!";
Кстати, почему бы просто не использовать grep -r
для рекурсивного поиска по всем подкаталогам в вашей директории log вашей строки?
РЕДАКТИРОВАТЬ: Я вижу ваши правки и две вещи. Во-первых, эта строка:
@files = grep(/\.*$/,readdir(DIR));
Неэффективно, потому что вы ищете ноль или более .
символов в конце строки. Так как это ноль или больше, он будет соответствовать всему в каталоге. Если вы пытаетесь исключить файлы, заканчивающиеся на .
, попробуйте следующее:
@files = grep(!/\.$/,readdir(DIR));
Обратите внимание на знак !
для отрицания, если вы пытаетесь исключить эти файлы. В противном случае (если вам нужны только эти файлы, а я неправильно понимаю ваши намерения), оставьте !
.
В любом случае, если вы получаете сообщение die
в строке 10, скорее всего, вы попали в файл с такими правами доступа, что вы не можете его прочитать. Попробуйте ввести имя файла в выходной файл die, чтобы увидеть, в каком файле происходит сбой:
open FILE, "$file" or die "Unable to open file: $file";
Но как и в других ответах, и повторять: Почему бы не использовать grep? Команда unix, а не функция Perl.