5

为什么opendir没有与 Perl Best Practices 中相同open策略

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

4

3 回答 3

3

Perl Best Practices 的原始规则(对于您提到的第一个策略)是

不要使用裸字文件句柄

这不仅仅适用于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 中第二个策略最接近的规则是

尽快明确地关闭文件句柄。

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

于 2010-01-02T08:03:14.450 回答
0

疯狂的猜测:文件被更频繁地使用,而且还没有人开始对目录句柄进行“lint-ish”工作。

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

于 2009-12-31T00:33:23.433 回答
0

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

于 2010-01-02T06:52:14.860 回答