是否可以从调用脚本中扩展 perl 模块?
像这样的东西:
#!/usr/bin/perl
use strict;
use Some::Module;
Some::Module::func = sub {
my $self = shift;
# ...
}
my $obj = new Some::Module;
$obj->func();
非常感谢!
您似乎想将 subs 添加到package。你几乎拥有它:
|
v
*Some::Package::func = sub {
...
};
^
|
但是如果你知道名字和子体,你为什么要在运行时做呢?也许你真的想要
sub Some::Package::func {
...
}
或者
{
package Some::Package;
sub func {
...
}
}
或者从最近开始,
package Some::Package {
sub func {
...
}
}
请注意,如果您这样做,几乎可以肯定您的设计很糟糕。
你可以用 typeglobs 做你所说的事情,但更简单的方法是这样做:
use Some::Module;
package Some::Module;
sub func {
my $self = shift;
# ...
}
package main;
my $obj = new Some::Module;
$obj->func();
是的。您可以声明要添加 subs 的包,然后添加它们。
package Some::Module {
sub func {
my $self = shift;
# ...
}
}
或查看perldoc 包了解更多信息。
如果你想覆盖一个 sub,你需要使用 typeglobs。