我想获得名称如下所有文件的列表: $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...
Run Code Online (Sandbox Code Playgroud)
但它没有给我所有的文件,但只有一半.当我添加了以下的调试代码:
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";
}
Run Code Online (Sandbox Code Playgroud)
结果输出是:
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: ''
Run Code Online (Sandbox Code Playgroud)
但所有这些文件都存在.因为glob假设像销售翻译一样工作,我已经检查了它,当我这样做时echo RESULTS//791463_0_SA0/ieuni5cts*.istf(以及其他未被检测到的glob文件,它会给出正确的文件名.
我还尝试将glob作为一个衬里运行,其路径没有给出结果,并且它有效:
perl -e 'print glob("RESULTS//791467_0_SA0/ieuni5cts*.istf"),"\n"'
Run Code Online (Sandbox Code Playgroud)
它也给出了正确的结果
我的代码中的问题在哪里?
Zai*_*aid 10
在列表上下文中,返回EXPR值的文件名扩展(可能为空)列表,例如标准的Unix shell/bin/csh.在标量上下文中,glob遍历此类文件名扩展,在列表耗尽时返回undef.
发布的代码位于标量上下文中.
看看在列表上下文中调用它是否解决了问题:
my ( $new_istf ) = glob ( "$res_dir/$line/$fub_name*.istf" );
Run Code Online (Sandbox Code Playgroud)