3

如果这个问题不适合 StackOverflow,我们深表歉意。我怀疑答案主要是见仁见智(除非其中一个风格指南有推荐)。

我有看起来像这样的代码

use File::Temp;

sub foo {
    ...
}
sub bar {
    ...
}
sub baz {
    my $fh = tempfile();
    ...
}

baz是唯一使用的子程序,File::Temp我没有使用 AutoLoader。use将声明放在里面是否合理baz,还是应该将其放在脚本的顶部?

4

2 回答 2

5

由于(正如 chepner 所说),技术上没有区别,这确实是风格问题。

将所有内容放在首位的优点:

  • 乍一看清楚所有直接模块依赖项是什么

  • 更易于维护 - 如果您需要使用库移动代码,则无需记住移动库。

    请注意,相同的确切逻辑也适用于变量声明,但在这种情况下,范围问题严重胜过“记住移动声明”问题,因此您应该在最内部可能的范围内声明变量,尽可能靠近它们的使用位置尽可能。

  • 对于您自己的代码在块中包含复杂逻辑的深奥情况,这些逻辑BEGIN{}取决于所有正在加载的库(例如,从所有加载的库中调用一个特别命名的方法 - 我已经这样做了) - 如果某个库的use调用是 AFTER那个BEGIN{}街区

将它们全部放在首位的缺点:

  • 有人可能会争辩说,这会降低代码的可读性,因为您需要查找文件的开头以查看从模块中导入的内容。坦率地说,我不相信这一点,但我听说过它,它至少有一些优点。
于 2012-08-02T19:14:56.340 回答
4

use本质上与将require语句放在BEGIN块中相同,因此将它们放在哪里并不重要;它们在您的任何其他代码之前进行评估。

于 2012-08-02T19:05:26.507 回答