Я полагаю, input()
возвращает что-то вроде ('fileA', 'fileB')
.
Проблема с вашим кодом заключается во вложенном цикле:
foreach my $test_path (@test_path){
foreach my $testname (@testname){
Это объединяет каждое $test_path
со всеми возможными $testname
. Вы этого не хотите. Кроме того, нет смысла присваивать скалярному результату результат map
: все, что вы получите, - это количество элементов в списке, созданном map
.
(Кроме того, у вас есть случайные chomp
вызовы, разбросанные по всему коду. Ничего из этого не должно быть.)
Вам нужен только один массив и один цикл:
use strict;
use warnings;
sub input {
return ('fileA', 'fileB');
}
my @input = input();
my $dirname = '../../../experiment';
my @files = map "$dirname/$_/$_.txt", @input;
for my $file (@files) {
print "got $file\n";
}
Здесь цикл скрыт в вызове map ..., @input
. Если вы хотите записать это как цикл for
, это будет выглядеть так:
my @files;
for my $input (@input) {
push @files, "$dirname/$input/$input.txt";
}