Я правильно понял? Ваша строка 10, которая дает вам ошибку
open FILE, "$file" or die "Unable to open files";
И файл $, который вы пытаетесь прочитать, в соответствии со строкой 6,
@files = grep(/\.*$/,readdir(DIR));
- это файл, который оканчивается нулем или более точкой . Это то, что вы действительно хотели? Это в основном соответствует каждому файлу в каталоге, включая "." а также "..". Может быть, у вас недостаточно прав для открытия родительского каталога для чтения?
РЕДАКТИРОВАТЬ: если вы хотите только прочитать все файлы (включая скрытые), вы можете использовать что-то вроде следующего:
opendir(DIR, ".");
@files = readdir(DIR);
closedir(DIR);
foreach $file (@files) {
if ($file ne "." and $file ne "..") {
open FILE, "$file" or die "cannot open $file\n";
# do stuff with FILE
}
}
Обратите внимание, что это не заботится о подкаталогах.