File::Globstar 不适用于某些模式
File::Globstar not working for some patterns
我正在尝试使用 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'
我是不是做错了什么?
这似乎是 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-specific。
$ 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
我正在尝试使用 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'
我是不是做错了什么?
这似乎是 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-specific。
$ 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