2

我正在编写一个脚本,它将遍历一系列数字,构建一个 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 模式,则两个文件都会正确列出。

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

4

2 回答 2

2

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

if (my @arr = glob("//headshot01/CARS/${currCarNum}_*_256.TGA")) {
于 2011-02-23T16:48:08.430 回答
1

perldoc perlop

(文件)glob 仅在开始新列表时才评估其(嵌入)参数。在重新开始之前必须读取所有值。在列表上下文中,这并不重要,因为无论如何您都会自动获取它们。但是,在标量上下文中,运算符在每次调用时返回下一个值,或者当列表用完时返回 undef

于 2011-02-24T08:50:49.607 回答