Perl,在包内调用new()

时间:2017-06-01 23:59:10

标签: perl

所以,我有一个perl模块,我想把它不仅用作模块,而且还要用作独立实用程序。在内部模块中调用new()是否正确:

package Module::Module;

sub new(){};

sub some_method(){};

sub _standalone_init(){
    $module = __PACKAGE__->new();
    #some magic and operations with $module' content
    &some_method();
};

__PACKAGE__->_standalone_init() unless caller;

1;
__END__

1 个答案:

答案 0 :(得分:4)

是的,__PACKAGE__->class_method完全合法。

但是还有很多其他问题:

  • 您使用的是不正确的原型。
  • 您正在使用原型。
  • 您正在使用方法原型,即使方法调用会忽略它们。
  • $module的范围应该是使用它的方法。
  • 您应该使用提供的类而不是__PACKAGE__
  • 我不是" modulinos"的粉丝。 (... unless caller;位于模块的顶层。)
  • 您需要;终止您的子声明/定义。

修正:

package Module::Module;

sub new { ... }

sub some_method { ... }

sub _standalone_init {
    my ($class) = @_;
    my $object = $class->new();
    $object->some_method();
}

__PACKAGE__->_standalone_init() unless caller;

1;

或只是

package Module::Module;

sub new { ... }

sub some_method { ... }

__PACKAGE__->new()->some_method() if !caller;

1;