Perl File Globbing Oddities

时间:2011-02-23 16:01:34

标签: perl glob built-in

我正在编写一个脚本,它将遍历一系列数字,构建一个glob模式,并测试一个文件是否存在于基于glob的目录中。

图像是Nascar车号图像,并按照以下模式:

1_EARNHARDTGANASSI_256.TGA
2_PENSKERACING_256.TGA

以下是我正在使用的脚本片段:

foreach $currCarNum (0..101) {  
    if (glob("//headshot01/CARS/${currCarNum}_*_256.TGA")) {    
        print("Car image $currCarNum exists\n");
    } else {
        print("Car image $currCarNum doesn't exist\n");
    }   
}

我遇到的问题是,目录中存在的图像应该与文件glob模式匹配。

例如,具有以下名称的文件将返回为不存在:

2_PENSKERACING_256.TGA

然而,以下内容将返回现有:

1_EARNHARDTGANASSI_256.TGA

如果我在DOS或Cygwin中使用相同的文件glob模式,则两个文件都会正确列出。

Perl中的文件glob模式是否有不同的解释?有什么我想念的吗?

2 个答案:

答案 0 :(得分:2)

您需要以列表格式而不是标量格式返回结果。试试这个if语句,当我测试它时,它对我有用。

if (my @arr = glob("//headshot01/CARS/${currCarNum}_*_256.TGA")) {

答案 1 :(得分:1)

来自perldoc perlop

  

(文件)glob评估其(嵌入式)   只有当它开始时的论证   新名单。必须读取所有值   在它重新开始之前。在列表中   上下文,这并不重要,因为   无论如何你自动得到它们。   但是,在标量上下文中   operator返回每个的下一个值   时间被称为,或者 undef时   列表已用完