Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl 文件::Globstar不适用于某些模式_Perl_Glob_Shopt - Fatal编程技术网

Perl 文件::Globstar不适用于某些模式

Perl 文件::Globstar不适用于某些模式,perl,glob,shopt,Perl,Glob,Shopt,我试图使用File::Globstar模块递归地搜索文件。 但是,当路径包含或时,文档中给出的一些模式对我不起作用 例如,执行以下任一操作时,搜索为空: 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模块递归地搜索文件。

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

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

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中的一个bug

>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
[固定在]

>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
试图逃离有问题的角色在两种系统上都是徒劳的

您应该向维护人员报告


您可以使用而不是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

已在文件Globstar 0.6中修复,请参阅