是否可以从调用脚本中扩展 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。