【发布时间】:2012-12-26 23:06:55
【问题描述】:
是否可以通过调用脚本扩展 perl 模块?
类似的东西:
#!/usr/bin/perl
use strict;
use Some::Module;
Some::Module::func = sub {
my $self = shift;
# ...
}
my $obj = new Some::Module;
$obj->func();
非常感谢!
【问题讨论】:
是否可以通过调用脚本扩展 perl 模块?
类似的东西:
#!/usr/bin/perl
use strict;
use Some::Module;
Some::Module::func = sub {
my $self = shift;
# ...
}
my $obj = new Some::Module;
$obj->func();
非常感谢!
【问题讨论】:
您似乎想将 subs 添加到 包。你几乎拥有它:
|
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 package 了解更多信息。
如果你想覆盖一个 sub,你需要使用 typeglobs。
【讨论】: