我想获得名称如下所有文件的列表:$res_dir/$line/$fub_name*.istf
含义:在子目录$dir
的目录$line
中,以$name
开头并以.istf
结尾的文件。
每个子目录只包含1个这样的文件,但是有很多子目录。我写了这个:
foreach $line (@arr){
chomp ($line);
$new_istf = glob ("$res_dir/$line/$fub_name*.istf");
do something...
但它没有给我所有文件,但只有一半。当我添加了以下调试代码时:
if ($new_istf){
print "\tdbug:: $res_dir/$line/$fub_name*.istf:\t'$new_istf'\n";
} else {
print "\tdbug:: $res_dir/$line/$fub_name*.istf:\t''\n";
}
,结果输出为:
dbug:: RESULTS//791202_0_SA0/ieuni5cts*.istf: 'RESULTS//791202_0_SA0/ieuni5cts.mlc.xxx.x.istf'
dbug:: RESULTS//791212_0_SA0/ieuni5cts*.istf: ''
dbug:: RESULTS//791241_0_SA0/ieuni5cts*.istf: 'RESULTS//791241_0_SA0/ieuni5cts.mlc.xxx.x.istf'
dbug:: RESULTS//791248_0_SA0/ieuni5cts*.istf: ''
dbug:: RESULTS//791251_0_SA0/ieuni5cts*.istf: 'RESULTS//791251_0_SA0/ieuni5cts.mlc.xxx.x.istf'
dbug:: RESULTS//791258_0_SA0/ieuni5cts*.istf: ''
dbug:: RESULTS//791272_0_SA0/ieuni5cts*.istf: 'RESULTS//791272_0_SA0/ieuni5cts.mlc.xxx.x.istf'
dbug:: RESULTS//791273_0_SA1/ieuni5cts*.istf: ''
dbug:: RESULTS//791301_0_SA0/ieuni5cts*.istf: 'RESULTS//791301_0_SA0/ieuni5cts.mlc.xxx.x.istf'
dbug:: RESULTS//791333_0_SA0/ieuni5cts*.istf: ''
dbug:: RESULTS//791349_0_SA0/ieuni5cts*.istf: 'RESULTS//791349_0_SA0/ieuni5cts.mlc.xxx.x.istf'
dbug:: RESULTS//791357_0_SA0/ieuni5cts*.istf: ''
dbug:: RESULTS//791405_0_SA1/ieuni5cts*.istf: 'RESULTS//791405_0_SA1/ieuni5cts.mlc.xxx.x.istf'
dbug:: RESULTS//791432_0_SA0/ieuni5cts*.istf: ''
dbug:: RESULTS//791434_0_SA0/ieuni5cts*.istf: 'RESULTS//791434_0_SA0/ieuni5cts.mlc.xxx.x.istf'
dbug:: RESULTS//791459_0_SA0/ieuni5cts*.istf: ''
dbug:: RESULTS//791462_0_SA0/ieuni5cts*.istf: 'RESULTS//791462_0_SA0/ieuni5cts.mlc.xxx.x.istf'
dbug:: RESULTS//791463_0_SA0/ieuni5cts*.istf: ''
dbug:: RESULTS//791467_0_SA0/ieuni5cts*.istf: 'RESULTS//791467_0_SA0/ieuni5cts.mlc.xxx.x.istf'
dbug:: RESULTS//791471_0_SA1/ieuni5cts*.istf: ''
但所有这些文件都存在。因为glob
假设像销售翻译一样工作,我检查过它,当我echo RESULTS//791463_0_SA0/ieuni5cts*.istf
(以及glob
未检测到的所有其他文件时,它会给出正确的文件名
我也尝试将glob作为一个衬里运行,路径没有给出结果,并且它有效:
perl -e 'print glob("RESULTS//791467_0_SA0/ieuni5cts*.istf"),"\n"'
它也给出了正确的结果
我的代码中的问题在哪里?
答案 0 :(得分:10)
在列表上下文中,返回一个(可能为空)文件名列表 扩展EXPR的值,例如标准的Unix shell / bin / csh会这样做。在标量上下文中,glob遍历这些 文件名扩展,当列表用完时返回undef。
发布的代码位于标量上下文中。
查看是否在列表上下文中调用它可以解决问题:
my ( $new_istf ) = glob ( "$res_dir/$line/$fub_name*.istf" );