为什么“opendir”与Perl最佳实践中的“开放”策略不同?

时间:2009-12-31 00:06:31

标签: perl

opendirPerl Best Practicesopen的政策不同,是否有原因?

我正在考虑至少这两项政策:

3 个答案:

答案 0 :(得分:3)

Perl最佳实践的原始规则(对于您提到的第一个政策)是

  

不要使用裸字文件句柄

不仅仅适用于open。 Perl :: Critic在很大程度上基于PBP,但确实有所不同(来自perldoc):

  

Perl :: Critic是一个可扩展的框架,用于为Perl源代码创建和应用编码标准。从本质上讲,它是一个静态源代码分析引擎。 Perl :: Critic与许多Perl :: Critic :: Policy模块一起分发,它们试图强制执行各种编码指南。大多数政策模块都基于Damian Conway的书Perl Best Practices。 但是,Perl :: Critic不仅限于PBP,甚至还支持与Conway相矛盾的政策。

因此,Perl :: Critic没有对opendir强制执行相同的规则这一事实可能主要是疏忽。也可以归咎于PBP中的示例仅使用open这一事实。我建议在CPAN上提交一个错误(查看代码,它只会改变一行)。

第二条规则实际上并非来自PBP,但在我看来它同样适用于opendir。再一次,关于CPAN的作者的错误报告将是一个好主意,因为它将再次只是一行更改。如果事实上这是一个有意的决定,你可能会得到更具体的反馈。

更正:它有点不同,但第二个政策中PBP中最接近的规则是

  

显式关闭文件句柄,并尽快关闭。

如果维护人员认为有必要(并且不担心它会破坏现有代码太多),那么修正该政策将不仅仅是一个班轮,但仍然相对容易。

答案 1 :(得分:0)

狂野的猜测:文件的使用频率更高,而且还没有人在目录句柄上进行“lint-ish”工作。

仅供参考:如果您真的想要实施这些,您可以实现一些东西来模拟Ruby open + block隐喻:创建一个打开/关闭包装子,它将另一个子作为参数来执行打开之间的实际I / O并关闭。我可以放一个代码示例,但是我有点偏离主题。

答案 2 :(得分:0)

问问作者?我知道这似乎是一种聪明的答案,但是找到源头是了解原因的最简单方法