For what it's worth, both examples you give work here on a Fedora box with Perl v5.18. The issue has nothing to do with the GLOB_LIMIT flag, since it is off by default. So it seems it's a problem with your system or perhaps an older version of Perl?
What's interesting is that the same results can be obtained just by dropping the trailing curly brace in a glob of any length:
Which prints the same thing as in your first example, without any error value returned:use File::Glob ":bsd_glob"; my $x = 'cff_updated/1_lib/{a,b,c'; my @y=bsd_glob($x); print "Error: $!\n" if &File::Glob::GLOB_ERROR; print(join("\n",@y),"\n");
cff_updated/1_lib/
You could add some diagnostics as shown in the example above and mentioned in the File::Glob documentation to your test and see if anything is returned. Also note that this File::Glob documentation also says that the ":glob" tag is now discouraged and you should use ":bsd_glob".
So while it doesn't happen on Fedora you seem to be hitting some limit in the length of the input glob and it is being truncated, dropping the trailing curly brace. Of course maybe you'll actually get an error return value if you try the example above which will point to another issue.
As an aside, since you mention an aversion to the built in Glob, the File::Glob documentation also mentions:
Since v5.6.0, Perl's CORE::glob() is implemented in terms of bsd_glob(). Note that they don't share the same prototype--CORE::glob() only accepts a single argument. Due to historical reasons, CORE::glob() will also split its argument on whitespace, treating it as multiple patterns, whereas bsd_glob() considers them as one pattern.
In reply to Re: Reliable glob?
by Loops
in thread Reliable glob?
by hepcat72
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |