嗨,请考虑这个Perl代码:
for my $line (@files){
#print "$line\n";
if ($line =~ /gene\/(\w.+)\s\w+\/(\w.+)(\.\S.+\.\S.+\.gz)/){
#print "$line\n";
@array = split ('\t', $1);
my $path = $array[0];
foreach my $pathi (sort(keys(%legend))){
foreach my $name ( keys %{$legend{$pathi}}){
foreach my $sample ( keys %{$legend{$pathi}{$name}}){
if ($pathi =~ $path){
my $dirsearch = "/Users/bob/Desktop/gene_ex/";
find(\&wantede, $dirsearch);
sub wantede {
if ($_ eq $name){
my $finalname = "$sample\_$name";
rename ($File::Find::name, "$File::Find::dir/$finalname") or print "Rename error";
}
}
}
}
}
}
}
}
我想要做的是搜索一个特定的文件,并在名称上附加另一个分支:find函数就像这样,但是当我试图在里面找到$ name时,我得到一个错误,即没有声明$ name或者其他的东西。我控制了所有的哈希,他们很好,我无法弄清楚出了什么问题。如果我首先进行连接,我每次都会在文件上找到相同的名称
在@files中,工作目录中有所有文件 在%legend中是一个哈希,其中第一个键是文件夹的名称,第二个键是文件名,第三个键是字符串。