2016-03-15 4 views
0

Я хочу создать массив из всех файлов из серии подкаталогов, по одному поддиректорию за раз. Мой текущий код возвращает сообщение об ошибке «Bad symbol for dirhandle» в последней строке этого кода. Что мне нужно изменить для правильного чтения в файлах для каждого подкаталога в массив @ I1_s?Прочитайте все файлы в серии подкаталогов в Perl

my $parent = "D:/Cleaned 10Ks" ; 
my ($par_dir, $sub_dir); 
opendir($par_dir, $parent); 
while (my $sub_folders = readdir($par_dir)) { 
    next if ($sub_folders =~ /^..?$/); # skip . and .. 
     my $path = $parent . '/' . $sub_folders; 
    next unless (-d $path); # skip anything that isn't a directory 
    chdir($path) or die "Cant chdir to $path $!"; 
    my @I1_s=readdir($path) ; 

ответ

4

readdir работы на ручках открыт с opendir. Вы используете его правильно в первый раз, но неправильно пытаетесь кормить его строкой с помощью пути второй раз.

Вы также можете быть заинтересованы в использовании File::Find вместо написания своей собственной реализации.

+0

Спасибо, я не понял, Мне пришлось снова использовать opendir. Это решает проблему! – Rick

2

Часто используется функция glob вместо opendir и readdir. Это имеет преимущество, игнорируя псевдо-каталоги . и .., а также возвращения пути вместо голых имен файлов

Я думаю, что ваш код должен выглядеть как этот

my $parent = 'D:/Cleaned 10Ks'; 

while (my $subdir = glob "$parent/*") { 

    next unless -d $subdir; 

    my @files = grep -f, glob "$subdir/*"; 
} 
Смежные вопросы