如果这个问题不适合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
语句相同,因此将它们放在哪里并不重要;它们在代码的任何其他部分之前进行评估。