相关疑难解决方法(0)

在Perl中,有什么理由更喜欢glob而不是readdir(反之亦然)?

这个问题是从这个问题中分拆出来的.一些历史:当我第一次学习Perl时,我总是使用glob而不是opendir+ readdir因为我发现它更容易.后来各种帖子和读物表明这glob很糟糕,所以现在我几乎总是使用readdir.

在思考了这个最近的问题之后,我意识到我选择其中一个或另一个选择的理由可能是无聊的.所以,我将列出一些优点和缺点,我希望更有经验的Perl人可以插入并澄清.概括地说,问题是有没有令人信服的理由,更喜欢globreaddirreaddirglob(在某些或所有情况下)?

glob 优点:

  1. 没有dotfiles(除非你要求他们)
  2. 物品的订单是有保证的
  3. 无需手动将目录名称添加到项目上
  4. 更好的名字(来吧- globreaddir没有比赛,如果我们的名字单独判断)
  5. (从ysth的回答;参见glob下面的参考资料4)可以返回不存在的文件名:

    @deck = glob "{A,K,Q,J,10,9,8,7,6,5,4,3,2}{\x{2660},\x{2665},\x{2666},\x{2663}}";
    
    Run Code Online (Sandbox Code Playgroud)

glob 缺点:

  1. 旧版本只是简单的破坏(但是"较旧"意味着5.6之前的版本,我认为,坦率地说,如果你使用的是5.6之前的版本,你会遇到更大的问题)
  2. stat每次调用(即stat在大多数情况下无用).
  3. 目录名称中的空格问题(这仍然是真的吗?)
  4. (来自brian的回答)可以返回不存在的文件名:

    $ perl -le 'print glob "{ab}{cd}"'
    
    Run Code Online (Sandbox Code Playgroud)

readdir 优点:

  1. (来自brian的回答)opendir返回一个文件句柄,你可以在你的程序中传递(并重用),但glob只返回一个列表
  2. (布莱恩的回答)readdir是正确的迭代器,并提供功能rewinddir,seekdir,telldir
  3. 快点?(根据上面的一些glob特征进行纯粹的猜测.无论如何,我并不是真的担心这种优化水平,但它是理论专家.)
  4. 不太容易出现边缘情况的错误glob
  5. 默认情况下读取所有内容(dotfiles)(这也是一个骗局)
  6. 可能会说服你不要命名文件0 …

perl glob readdir

62
推荐指数
4
解决办法
1万
查看次数

标签 统计

glob ×1

perl ×1

readdir ×1