放在哪里使用呢?
use
发生在编译时,所以把它放在哪里并不重要。至少从纯粹务实的“它会起作用吗”的角度来看。因为它发生在编译时use
即使您将其放在条件中,也始终会被执行。切勿这样做:if( $foo eq 'foo' ) { use SomeModule }
根据我的经验,最好将所有 use 语句放在文件的顶部。它可以轻松查看正在加载的内容以及您的依赖项。
Update:
As 布莱恩·D·福伊指出 https://stackoverflow.com/questions/1457796/is-it-okay-to-use-modules-from-within-subroutines#comment1309798_1457885,之前编译的东西use
声明不会受其影响。因此,位置可能很重要。对于典型的模块,位置并不重要,但是,如果它执行影响编译的操作(例如导入具有原型的函数),则位置可能很重要。
Also, 查斯·欧文斯指出 https://stackoverflow.com/questions/1457796/is-it-okay-to-use-modules-from-within-subroutines/1457936#1457936它会影响编译。旨在改变编译的模块称为编译指示。按照惯例,编译指示的名称全部小写。这些影响仅适用于模块的使用范围。查斯使用integer
他的回答中以 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;
为什么你的测试脚本在服务器上很慢?
根据您提供的信息无法判断。
但找出答案的简单方法是分析你的代码 http://www.perl.com/pub/a/2004/06/25/profiling.html并查看时间消耗在哪里。NYTProf http://search.cpan.org/perldoc?Devel::NYTProf是您可能想要查看的另一种流行的分析工具。
最佳实践
查看Perl 最佳实践 http://oreilly.com/catalog/9780596001735/,以及快速参考 http://johnbokma.com/perl/perl-quick-reference-card.html卡片。该页面有PBP 的 Damian Conway 的 OOP 建议的精彩总结 http://www.windley.com/archives/2005/08/best_practices.shtml.
另外,您可能希望考虑使用Moose http://moose.perl.org/。如果较长的脚本启动时间在您的使用中是可以接受的,那么 Moose 是一个巨大的胜利。