Perl glob 在尝试匹配特定文件类型时返回误报

Posted

技术标签:

【中文标题】Perl glob 在尝试匹配特定文件类型时返回误报【英文标题】:Perl glob returning false positive when trying to match specific file types 【发布时间】:2022-01-14 10:28:22 【问题描述】:

我正在尝试使用 glob 匹配目录中的“program.log”或“program.log.gz”或两者,但 glob 将两个字符串都返回到 @array,无论它们是否存在。

我做到了

@array = glob ("$dir/program.log,log.gz");

现在@array 包含

$dir/program.log
$dir/program.log.gz

不管它们是否真的存在。

似乎 glob 只是扩展字符串并将其传递给@array,而不管文件是否实际存在。这是 glob 的预期行为吗?如果是这样,我如何只将存在的文件名传递给@array?

【问题讨论】:

就像在 shell 中一样,只有 *? 执行文件系统扩展。例如,glob("a,bc,d") 将返回 abadbcbd,无论这些文件是否存在。 【参考方案1】:

这是glob 的记录行为:

如果非空大括号是 glob 中唯一使用的通配符,则不会匹配文件名,但可能会返回许多字符串。例如,这会产生九个字符串,每个字符串对应一个水果和颜色:

my @many = glob "apple,tomato,cherry=green,yellow,red";

如果您只想将现有文件传递给数组,可以使用grep 和文件测试,例如-e(存在)

my @files = grep -e, glob ("$dir/program.log,log.gz");

【讨论】:

感谢您的澄清!不会撒谎,当我第一次阅读 perldoc 时,我不太明白它在说什么。 @Xflkekw 不客气。 perldocs 一开始可能很难理解,但它们确实包含很多有用的信息,因此请务必仔细阅读。

以上是关于Perl glob 在尝试匹配特定文件类型时返回误报的主要内容,如果未能解决你的问题,请参考以下文章

perl模糊匹配文件名

Python之glob模块进行文件匹配及遍历

R语言sys方法:sys.getpid函数获取R会话的进程IDsys.glob函数和file.path函数匹配文件夹下的所有特定类型文件sys.info函数获取系统和用户信息

“glob”类型模式是不是有等效的 java.util.regex ?

php 使用Glob() 查找文件技巧

如何修改这个 Perl 子例程,以便它使用 print_file 打印文件的内容?