【问题标题】:Extending perl module from within the calling script从调用脚本中扩展 perl 模块
【发布时间】: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 module


    【解决方案1】:

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

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

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

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

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

    或者最近,

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

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

    【讨论】:

      【解决方案2】:

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

      use Some::Module; 
      
      package Some::Module;
      
      sub func {
        my $self = shift; 
        # ...
      }
      
      package main;
      
      my $obj = new Some::Module; 
      
      $obj->func(); 
      

      【讨论】:

      • 感谢大家的帮助! :)
      • 不客气。请通过单击灰色的复选标记接受最佳答案之一。
      【解决方案3】:

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

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

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

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

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-07-23
      • 1970-01-01
      • 1970-01-01
      • 2011-04-05
      • 1970-01-01
      • 2012-11-14
      • 2014-06-05
      相关资源
      最近更新 更多