1

是否可以从调用脚本中扩展 perl 模块?

像这样的东西:

#!/usr/bin/perl 

use strict; 
use Some::Module; 

Some::Module::func = sub {
  my $self = shift; 
  # ...
}


my $obj = new Some::Module; 

$obj->func(); 

非常感谢!

4

3 回答 3

5

您似乎想将 subs 添加到package。你几乎拥有它:

|
v
*Some::Package::func = sub {
   ...
};
 ^
 |

但是如果你知道名字和子体,你为什么要在运行时做呢?也许你真的想要

sub Some::Package::func {
   ...
}

或者

{
   package Some::Package;
   sub func {
      ...
   }
}

或者从最近开始,

package Some::Package {
   sub func {
      ...
   }
}

请注意,如果您这样做,几乎可以肯定您的设计很糟糕。

于 2012-12-26T23:41:50.250 回答
4

你可以用 typeglobs 做你所说的事情,但更简单的方法是这样做:

use Some::Module; 

package Some::Module;

sub func {
  my $self = shift; 
  # ...
}

package main;

my $obj = new Some::Module; 

$obj->func(); 
于 2012-12-26T23:09:47.317 回答
2

是的。您可以声明要添加 subs 的包,然后添加它们。

package Some::Module {
  sub func {
  my $self = shift;
  # ...  
  }
}

或查看perldoc 包了解更多信息。

如果你想覆盖一个 sub,你需要使用 typeglobs。

于 2012-12-26T23:09:55.273 回答