从调用脚本中扩展perl模块

时间:2012-12-26 23:06:56

标签: perl module

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

类似的东西:

#!/usr/bin/perl 

use strict; 
use Some::Module; 

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


my $obj = new Some::Module; 

$obj->func(); 

非常感谢!

3 个答案:

答案 0 :(得分:5)

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

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

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

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

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

或从最近开始,

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

请注意,如果你这样做,你几乎肯定会有一个糟糕的设计。

答案 1 :(得分:4)

你可以用typeglobs做你正在谈论的事情,但更简单的方法就是这样做:

use Some::Module; 

package Some::Module;

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

package main;

my $obj = new Some::Module; 

$obj->func(); 

答案 2 :(得分:2)

是。您可以声明要添加子包的包,只需添加它们。

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

或点击perldoc package了解详情。

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