これは私の初めてのPerlでのOOPの使用です。私は仕事中の4k行の手続き型プログラムをリファクタリングする過程にあります。それはかなりまっすぐ進むようですが、私は継承とSUPERに問題があります。Perl - "Module :: SUPER"でオブジェクトメソッドを見つけることができません
エラーメッセージ:私は試してみました
"Can't locate object method "New" via package "Module::SUPER" at Module.pm line 10"
、使用ベース、親と@ISAを設定したが、それらはすべて同じエラーを取得します。私は何かを見落とさなければならないと確信しています。
(これは私が働いているプログラムからのコードではありません。同じエラーを生成するだけの例)
すべての.pmと.plのファイルは、この例では、同じディレクトリにあります。プログラムで私はメインプログラムで作業しているbinにあり、モジュールは../modules(ビンに相対)になります。
私はこれは私がその仕事をするために必要なすべてのだろうと仮定します:
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;
私は親クラスがすでに祝福$自己を返す場合、子クラスを祝福する必要がありますか?
メインスクリプト
#!/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();
すべてのヘルプは大歓迎です。
'S /新/' ... –
は、私はそれが@elを何を意味するのかわからないんだけど/新しいです.pescado – Adam