我已经阅读了一些与此类似的帖子,但他们并没有我想要的答案。基本上,我正在努力使用这个 File::find 函数通过引用传递。原始代码很大。所以我取出了一些代码。
注意
$node,$ref_p, $ref_alphaSUM ,$ref_rank, $ref_sorted_alpha, $output_file
都是全局变量的变量或引用。我需要递归遍历目录并将 &eachFile 子例程应用于每个文件,这将更新我的上述变量。"&whichFiles" 子例程只是对文件名进行排序。
第一个问题:由于不是目录中的所有文件都包含字符串nfcapd,因此我添加了if(/^nfcapd./)行 来检查文件名是否包含此字符串。但是由于我还将上面的这些变量传递给 eachFile,所以现在不能使用“$_”。
因此,我相信这就是为什么我不断收到以下错误:(如果我错了,请纠正我):
Use of uninitialized value $File::Find::name in pattern match (m//) at
./pvalues.pl line 178, <PRE> line 65184 (#1)
第 178 行是if(/^nfcapd./)在下面的代码中出现的行。这导致了第二个问题:如何在查找函数中通过引用传递,同时为文件名保留一个变量,以便我仍然可以检查“&eachFile”是否应用于正确的文件?
#!/usr/bin/perl
use strict;
use warnings;
use File::Find;
find ({wanted => \&eachFile($node,$ref_p, $ref_alphaSUM ,$ref_rank, $ref_sorted_alpha, $output_file), preprocess => \&whichFiles},$flow_data_path);
sub eachFile {
my ($node , $ref_p, $ref_alphaSUM ,$ref_rank, $ref_sorted_alpha , $output_file) = @_;
if(/^nfcapd\./){
#do something
}
}