所以,我有一个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__
答案 0 :(得分:4)
是的,__PACKAGE__->class_method
完全合法。
但是还有很多其他问题:
$module
的范围应该是使用它的方法。__PACKAGE__
。... 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;