假设我有两个文件:一个看起来像这样的模块文件:
package myPackage;
use Bio::Seq;
和另一个看起来像这样的文件:
use lib "path/to/lib";
use myPackage;
use Bio::Seq;
我怎样才能防止 Bio::Seq 被包含两次?谢谢
模块不像在 C 中那样“包含”在 Perl 中。它们是“加载的”,我的意思是“执行”。
一个模块只会被加载/执行一次,无论有多少条use
语句指定它。
每个模块唯一发生的事情use
就是调用模块的import
方法。这通常用于将符号导出到 using 命名空间。
use Foo
主要相当于
# perldoc -f use
BEGIN {
require "Foo.pm";
Foo->import();
}
并且require "Foo"
大多相当于
# perldoc -f require
sub require {
my ($filename) = @_;
if (exists $INC{$filename}) {
return 1 if $INC{$filename};
die "Compilation failed in require";
}
# .... find $filename in @INC
# really load
return do $realfilename;
}
所以
不,代码不会多次“加载”,只会多次“导入”。
如果您有代码,例如
package Bio::Seq;
...
sub import {
# fancy stuff
}
你想确保加载了一个库,但不调用import
它,
#perldoc -f use
use Bio::Seq ();
use
我猜 OP 可能会寻找一种方法来避免在他/她的 Perl 脚本开头出现一长串语句样板。在这种情况下,我想向大家指出Import::Into
. 它的工作方式类似于 Java 和 Python 中的关键字import
。此外,这篇博文还提供了一个精彩的Import::Into
.