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

dao*_*oad 15 perl glob

我只是在看有人可以告诉我如何创建一个目录内容数组?.不出所料,提供文件全球作为答案.让我感到惊讶的是这篇帖子推荐使用glob()而不是<*>.

我用的<*>是因为这是我很久以前学到的,从未想过它.这不是一个好理由.

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

Mic*_*man 12

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

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


小智 10

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

首先进行一级双引号解释,但你不能说<$foo> 因为这是一个间接的文件句柄,如前一段所述.(在旧版本的Perl中,程序员会插入大括号来强制解释为文件名glob:. <${foo}>现在,直接调用内部函数被认为更干净glob($foo),这可能是首先完成它的正确方法.)

我自己主要使用File::Find和它的同类.