2011-08-24 38 views
1

glob`功能我想获得它的名字看起来像所有文件的列表:$res_dir/$line/$fub_name*.istf问题`在Perl

含义:在目录$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"' 

,它给了正确的结果,以及

哪里是我的代码问题

回答

10

?从开始:


在列表上下文,返回的文件名的扩展 上EXPR的值,如标准的Unix外壳 /bin中/ CSH会做的(可能是空的)列表。在标量上下文中,glob循环遍历这样的文件名扩展,当列表耗尽时返回undef。


发布的代码是在标量上下文。

看看调用它在列表环境解决了这个问题:

my ($new_istf) = glob ("$res_dir/$line/$fub_name*.istf");