【发布时间】:2018-09-20 08:13:40
【问题描述】:
所以,我有一个这样的程序:
#!/usr/bin/perl -w
use strict;
foreach (@data) {
if($_ eq "foo") {
use Foo;
process();
}
if($_ eq "bar") {
use Bar;
process();
}
...
}
每个包含的模块都有些相似,唯一的区别是 process()-sub 的作用。
#!/usr/bin/perl -w
use strict;
sub process {
...
}
我的问题:主脚本的输入是一个(可能很长的)事物列表,在处理该列表时,我得到连续的“子程序重新定义”错误(显然)。有没有办法“取消使用”模块?
由于将来可能包含的“动作”库可能会增长,我认为这种动态包含模块的方式将是最好的方法。非常感谢您的帮助:)
【问题讨论】:
-
在您的情况下,不需要
use,而是使用require。 -
@pilcrow +1 出色的措辞,好先生。
-
写
Foo::process(...)和Bar::process(...)是否会增加这么多的输入。虽然我很喜欢 Tudor 的多态示例,但它并不一定比use Foo (); Foo::process()更难。如果模块使用Exporter管理其导出,则空列表让它知道我们不需要导出。 -
永远不要在没有
package的情况下使用use或require。为此使用do。 -
@pilcrow,它仍然会给出重新定义的警告,如果输入是
qw( foo bar foo),它仍然会失败。
标签: perl perl-module