File :: Globstar在某些模式下不起作用

时间:2019-05-07 07:21:31

标签: perl glob

我正在尝试使用File :: Globstar模块来递归搜索文件。 https://metacpan.org/pod/File::Globstar#EXAMPLES

但是,当路径包含._时,文档中给出的某些模式对我不起作用。

例如,当我执行以下任一操作时,搜索为空:

use File::Globstar qw(globstar);
my $path = 'D:/a.a/b/c/**/*.js';
my @results = globstar $path;

use File::Globstar qw(globstar);
my $path = 'D:/a_a/b/c/**/*.js';
my @results = globstar $path;

但是,当我避免使用**时,这些方法会起作用。

my @results = globstar 'D:/a.a/b/c/e/*.js' 

我做错什么了吗?

1 个答案:

答案 0 :(得分:2)

这似乎是File :: Globstar中的错误。

[已修复0.6 ]

>md f_oo & md f_oo\bar & copy nul f_oo\bar\a.js >nul

>perl -MFile::Globstar=globstar -e"CORE::say for globstar 'f_oo/**/*.js'"

>md f.oo & md f.oo\bar & copy nul f.oo\bar\a.js >nul

>perl -MFile::Globstar=globstar -e"CORE::say for globstar 'f.oo/**/*.js'"

>md foo & md foo\bar & copy nul foo\bar\a.js >nul

>perl -MFile::Globstar=globstar -e"CORE::say for globstar 'foo/**/*.js'"
foo/bar/a.js

该错误不是Windows特有的。

$ md -p f_oo/bar; touch f_oo/bar/a.js

$ perl -MFile::Globstar=globstar -e'CORE::say for globstar "f_oo/**/*.js"'

$ md -p f.oo/bar; touch f.oo/bar/a.js

$ perl -MFile::Globstar=globstar -e'CORE::say for globstar "f.oo/**/*.js"'

$ md -p foo/bar; touch foo/bar/a.js

$ perl -MFile::Globstar=globstar -e'CORE::say for globstar "foo/**/*.js"'
foo/bar/a.js

在两个系统上尝试逃脱有问题的字符都无济于事。

您应该reach out去找维护者。


您可以使用File::Find::Rule代替File :: Globstar。

>md f_o.o & md f_o.o\bar & copy nul f_o.o\bar\a.js >nul

>perl -MFile::Find::Rule -e"CORE::say for File::Find::Rule->name('*.js')->in('f_o.o')"
f_o.o/bar/a.js