Perl - 无法通过" Module :: SUPER"

时间:2016-08-29 13:51:08

标签: perl super

这是我第一次在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();

非常感谢任何帮助。

1 个答案:

答案 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()检查一下。