开发者

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 as glob($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.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜