我想配对两个数组并在它们之间添加char'/'。假设两个数组如下所示
@array1 = (FileA .. FileZ);
@array2 = (FileA.txt .. FileZ.txt);
我想要的输出如下所示
../../../experiment/fileA/fileA.txt
.
.
../../../experiment/fileZ/fileZ.txt
这是我的代码
my @input_name = input();
my $dirname = "../../../experiment/";
# CREATE FOLDER PATH
my @fileDir;
foreach my $input_name (@input_name){
chomp $input_name;
$_ = $dirname . $input_name;
push @fileDir, $_;
}
# CREATE FILE NAME
my @filename;
my $extension = '.txt';
foreach my $input_name (@input_name){
chomp $input_name;
$_ = $input_name . $extension;
push @filename, $_;
}
我要尝试的代码如下。但这似乎不起作用
#CREATE FULL PATH
foreach my $test_path (@test_path){
foreach my $testname (@testname){
my $test = map "$test_path[$_]/$testname[$_]", 0..$#test_path;
push @file, $test;
}
}
print @file;
答案 0 :(得分:3)
我假设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";
}
答案 1 :(得分:0)
问题在于您的算法。您要同时迭代所有文件名和所有目录名。 我的意思是,您的代码显示为“对于每个目录,创建每个文件”。
尝试类似的方法,您会没事的:
{{1}}