包应该全局使用还是从需要它们的函数中使用?

  • 本文关键字:函数 全局 包应该 perl
  • 更新时间 :
  • 英文 :


如果这个问题不适合StackOverflow,我们深表歉意。我怀疑答案在很大程度上是一个意见问题(除非其中一个风格指南有建议)。

我有一个类似的代码

use File::Temp;
sub foo {
    ...
}
sub bar {
    ...
}
sub baz {
    my $fh = tempfile();
    ...
}

baz是唯一使用File::Temp的子例程,我不使用AutoLoader。将use声明放在baz中合理吗?还是应该将其放在脚本的顶部?

因为(正如chepner所说),技术上没有区别,这实际上是一个风格问题。

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

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

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

    请注意,同样的逻辑也适用于变量声明,但在这种情况下,作用域问题严重超过了"记住移动声明"问题,因此您应该在尽可能靠近其使用位置的最内部范围内声明变量。

  • 对于您自己的代码在BEGIN{}块中包含复杂逻辑的深奥情况,这取决于正在加载的所有库(例如,从所有加载的库中调用一个特定命名的方法,我已经这样做了),如果某个库的use调用在BEGIN{}块之后,您将遇到错误

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

  • 有人可能会说,这会降低代码的可读性,因为您需要查找文件的开头,以查看从模块导入的内容。坦率地说,我不相信这一点,但我已经听到了它的表达,它至少有一些优点

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

最新更新