Вывести файл в каталог и сохранить в массиве. Этот массив может быть доступ вне цикла - PullRequest
1 голос
/ 12 июня 2019

Я хочу перечислить файлы в папке и хочу сохранить в массиве. Как я могу сделать доступ к массиву вне цикла? Мне нужно, чтобы этот массив находился снаружи, так как нужно использовать его вне массива

Это код:

use strict;
use warnings;

my $dirname       = "../../../experiment/";
my $filelist;
my @file;

open ( OUTFILE, ">file1.txt" );

opendir ( DIR, $dirname ) || die "Error in opening dir $dirname\n";

while ( $filelist = readdir (DIR) ) {

   next if ( $filelist =~ m/\.svh$/ );
   next if ( $filelist =~ m/\.sv$/ );
   next if ( $filelist =~ m/\.list$/ );

   push @fileInDir, $_; 

}

closedir(DIR);

print OUTFILE " ", @fileInDir;

close OUTFILE;

Сообщение об ошибке

Use of uninitialized value in print at file.pl line 49.

1 Ответ

2 голосов
/ 12 июня 2019

Вы помещаете унифицированную переменную $_ в массив, а не $filelist, который вводится в заблуждение (это только одно имя файла).

Вы можете использовать:

use strict;
use warnings;

my $dirname = "../../../experiment/";
my $fname = "file1.txt";
my @files;

open my $out_fh, ">", $fname or die "Error in opening file $fname: $!";
opendir my $dir, $dirname or die "Error in opening dir $dirname: $!";

while (my $file = readdir($dir)) {
   next if ($file =~ m/\.svh$/);
   next if ($file =~ m/\.sv$/);
   next if ($file =~ m/\.list$/);
   push @files, $file;
}

print $out_fh join "\n", @files;
closedir $dir;
close $out_fh;               
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...