这是我第一次在perl上使用OOP。我正在重构4k行程序程序。这看起来非常简单,但我有继承和SUPER的问题。
错误讯息:
"Can't locate object method "New" via package "Module::SUPER" at Module.pm line 10"
我试过,使用base,parent和设置@ISA但是它们都得到了同样的错误。我确定我必须忽略一些东西。
(这不是我正在处理的程序中的代码。只是一个产生相同错误的例子)
此示例中所有.pm和.pl文件都在同一目录中。在我正在进行的程序中,主程序在bin中,模块将在../modules(相对于bin)中。
我认为这就是我需要做的所有工作:
use lib "../modules";
如果我错误的想法,请告诉我。
家长模块
package BaseModule;
use strict;
use warnings;
sub new {
my $class = shift;
my $self = {
ARRAY => shift,
DIVIDER => ","
};
bless ($self, $class);
return $self;
}
sub array {
my $self = shift;
if(@_) { $self->{ARRAY} = shift };
return $self->{ARRAY};
}
sub divider {
my $self = shift;
if(@_) { $self->{DIVIDER} = shift };
return $self->{DIVIDER};
}
sub testSub {
my $self = shift;
print join($self->{DIVIDER}, @{ $self->{ARRAY} } );
return 1;
}
1;
子模块
package Module;
use strict;
use warnings;
#use base qw(BaseModule);
#require BaseModule;
#our @ISA = qw(BaseModule);
use parent qw(BaseModule);
sub new {
my $class = shift;
my $self = $class->SUPER::New(@_);
$self->{STRING} = shift;
bless ($self, $class);
return $self;
}
sub string {
my $self = shift;
if(@_) { $self->{STRING} = shift };
return $self->{STRING};
}
sub testSub {
my $self = shift;
print "$self->{STRING}:\n";
$self->SUPER::testSub();
return 1;
}
1;
如果父类返回已经受祝福的$ self?
,我是否需要祝福子类?主脚本
#!/usr/bin/perl
use strict;
use warnings;
use Module;
my $module = Module->new([1, 2, 3, 4, 5], "Example");
$module->divider(" | "); # Test Changing divider;
$module->testSub();
非常感谢任何帮助。
答案 0 :(得分:2)
"Can't locate object method "New" via package "Module::SUPER" at Module.pm line 10"
您尝试致电BaseModule::New
未定义(您的意思是BaseModule::new
吗?Perl区分大小写。)
如果父类返回一个,我是否需要祝福子类 已经祝福$ self?
不,$self
此时已经很幸运(你可以通过Scalar::Util::blessed()
检查一下。