glob('foo *')相对于<foo *>?</foo *>的比较优势是什么?

时间:2010-01-18 17:39:08

标签: perl glob

我只是在看Can someone tell me how to create an array of directory contents?。不出所料,提供文件全球作为答案。让我感到惊讶的是该帖子建议使用glob()而不是<*>

我使用<*>,因为这是我很久以前学到的,从未考虑过。这不是一个好理由。

您喜欢使用什么语法进行通配?为什么?

3 个答案:

答案 0 :(得分:12)

就我个人而言,我认为<>严重超载。它有点意思是“从迭代器中读取”,但在确定哪种迭代器符合我的口味时,有一点太多的魔力和微妙之处。例如<$foo><$foo{bar}>意味着截然不同的事情,神奇的<>意味着不同的东西。

我更喜欢使用glob并为句柄保留<>语法。这样做可以节省认知负担,即确定<>的内容是模式而不是句柄(或解析为一个)。也就是说,如果您在心理上将<>符号与“迭代器”而不是“读取”相关联,那么您可能更喜欢使用函数语法 - 至少对于您想要跳过结果而不是生成列表。

答案 1 :(得分:10)

您链接的perldoc表示角括号语法存在一些问题:

  

一级双引号   首先解释,但是你   不能说<$foo>,因为那是一个   间接文件句柄,如中所述   上一段。 (在较旧的   Perl的版本,程序员会   插入大括号以强制使用   解释为文件名glob:   <${foo}>。这些天,考虑到了   更清洁,以调用内部功能   直接为glob($foo),即   可能是完成它的正确方法   首先。

我自己主要使用File::Find及其同类。

答案 2 :(得分:2)

这些天我坚持使用glob,因为与使用尖括号相比,我发现它更具可读性和新手友好性(*)。

(*)perldoc -f glob有效。