用在什么地方?
use
发生在编译时,所以你把它放在哪里都没有关系。至少从纯粹实用的角度来看,“它会起作用”。因为它发生在编译时use
总是会被执行,即使你把它放在一个条件中。永远不要这样做:if( $foo eq 'foo' ) { use SomeModule }
根据我的经验,最好将所有使用语句放在文件顶部。它可以轻松查看正在加载的内容以及您的依赖项。
更新:
正如brian d foy 指出的那样,在声明之前编译的东西use
不会受到它的影响。因此,位置可能很重要。对于典型的模块,位置无关紧要,但是,如果它做了影响编译的事情(例如它导入具有原型的函数),则位置可能很重要。
此外,Chas Owens 指出它会影响编译。旨在改变编译的模块称为 pragma。按照惯例,pragma 的名称都是小写的。这些效果仅适用于使用模块的范围内。Chasinteger
在他的回答中以 pragma 为例。您还可以使用关键字在有限范围内禁用编译指示或模块no
。
use strict;
use warnings;
my $foo;
print $foo; # Generates a warning
{ no warnings 'unitialized`; # turn off warnings for working with uninitialized values.
print $foo; # No warning here
}
print $foo; # Generates a warning
间接对象语法
在您的示例代码中,您有my $obj = new ObjectX;
. 这称为间接对象语法,最好避免使用,因为它会导致难以理解的错误。最好使用这种形式:
my $obj = ObjectX->new;
为什么您的测试脚本在服务器上运行缓慢?
您提供的信息无法判断。
但找出问题的简单方法是分析您的代码并查看时间消耗在哪里。 NYTProf是您可能想要查看的另一种流行的分析工具。
最佳实践
查看Perl Best Practices和快速参考卡。此页面对来自 PBP 的 Damian Conway 的 OOP 建议进行了很好的总结。
此外,您可能希望考虑使用Moose。如果您可以接受较长的脚本启动时间,那么 Moose 是一个巨大的胜利。