在Perl中有什么原因喜欢glob超过readdir(反之亦然)?
这个问题是从
this one的分裂。一些历史:当我第一次学习Perl,我几乎总是使用glob而不是opendir readdir,因为我发现它更容易。后来各种帖子和读数建议glob是坏的,所以现在我几乎总是使用readdir。
经过this recent question的思考,我意识到我的理由,一个或另一个选择可能是双层。所以,我将列出一些优点和缺点,我希望更有经验的Perl人可以提出和澄清。简单的问题是有强烈的理由喜欢glob到readdir或readdir到glob(在某些或所有情况下)? glob专业版: >没有dotfiles(除非你要求他们) @deck = glob "{A,K,Q,J,10,9,8,7,6,5,4,3,2}{x{2660},x{2665},x{2666},x{2663}}"; glob cons: >旧版本只是简单破碎(但是“老”意味着前5.6,我想,坦率地说,如果你使用pre 5.6 Perl,你有更大的问题) $ perl -le 'print glob "{ab}{cd}"' readdir专业: >(从brian的回答)opendir返回一个文件句柄,你可以在你的程序中传递(和重用),但是glob只是返回一个列表 readdir缺点: >如果你不记得添加目录名称,当你试图做文件测试或复制项目或编辑项目或者… 解决方法
你错过了它们之间最重要的,最大的区别:glob给你一个列表,但opendir给你一个目录句柄。您可以传递该目录句柄,让其他对象或子例程使用它。使用目录句柄,子例程或对象不必知道它来自哪里,谁正在使用它,等等:
sub use_any_dir_handle { my( $dh ) = @_; rewinddir $dh; ...do some filtering... return @files; } 使用dirhandle,你有一个可控的迭代器,你可以用seekdir移动,虽然与glob你只是得到下一个项目。 与任何东西一样,成本和收益只适用于某一特定上下文时才有意义。它们不存在于特定用途之外。你有一个很好的他们的差异的列表,但我不会分类这些差异,而不知道你在尝试与他们做什么。 还有一些要记住的事情: >你可以实现你自己的glob与opendir,但不是反过来。 $ perl -le 'print glob "{ab}{cd}"' (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |