我正在编写一个脚本,它将循环遍历一系列数字,构建一个 glob 模式,并根据 glob 测试目录中是否存在文件。
这些图像是纳斯卡赛车号码图像,并遵循以下模式:
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");
}
}
我遇到的问题是目录中存在的图像应该与文件全局模式不匹配。
例如,具有以下名称的文件将返回为不存在:
2_PENSKERACING_256.TGA
然而,以下内容将按现有情况返回:
1_EARNHARDTGANASSI_256.TGA
如果我在 DOS 或 Cygwin 中使用相同的文件 glob 模式,两个文件都会正确列出。
文件全局模式在 Perl 中的解释是否不同?我有什么遗漏的吗?
最佳答案
您需要以列表格式而不是标量格式返回结果。在你的 if 语句中尝试这个,当我测试它时它对我有用。
if (my @arr = glob("//headshot01/CARS/${currCarNum}_*_256.TGA")) {
关于Perl 文件通配的奇怪现象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5093393/