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")
将返回 ab
、ad
、bc
、bd
,无论这些文件是否存在。
【参考方案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 在尝试匹配特定文件类型时返回误报的主要内容,如果未能解决你的问题,请参考以下文章
R语言sys方法:sys.getpid函数获取R会话的进程IDsys.glob函数和file.path函数匹配文件夹下的所有特定类型文件sys.info函数获取系统和用户信息