What are the comparative advantages of glob('foo*') over <foo*>?
I was just looking at Can someone tell me how to create an array of directory contents?. Unsurprisingly, file globs were offered as an answer. What surprised me was that开发者_StackOverflow中文版 the post recommended using glob()
rather than <*>
.
I use <*>
because that is what I learned a long time ago and have never thought about it. Which is not a good reason.
What syntax do you prefer for globbing, and why?
Personally, I think that <>
is badly overloaded. It sort of means "read from an iterator" but there's a little too much magic and subtlety in determining which iterator of what kind for my taste. e.g. <$foo>
and <$foo{bar}>
mean very different things, and the magical bare <>
means something different yet.
I prefer to use glob
and reserve the <>
syntax for handles. Doing that saves the cognitive burden of figuring out whether the contents of the <>
is a pattern rather than a handle (or something that resolves to one). That said, if you mentally associate the <>
notation with "iterator" instead of "read" you might prefer that to the functional syntax -- at least for those cases where you want to step over the results rather than generate a list.
That perldoc you linked says there's some issues with the angle-bracket syntax:
One level of double-quote interpretation is done first, but you can't say
<$foo>
because that's an indirect filehandle as explained in the previous paragraph. (In older versions of Perl, programmers would insert curly brackets to force interpretation as a filename glob:<${foo}>
. These days, it's considered cleaner to call the internal function directly asglob($foo)
, which is probably the right way to have done it in the first place.)
I mostly use File::Find
and its ilk myself.
These days I stick with glob
, because I find it to be more readable and newbie-friendly(*) as compared to using angle brackets.
(*) perldoc -f glob
works.
精彩评论