我有一個名爲RuleObject的基礎對象和一個從名爲RuleObjectString繼承的對象。我在RuleObjectString中有一個新方法,我想在使用該對象的代碼中調用它。但我得到錯誤。 '通過包「RuleObject」在./testobject.pl第10行找不到對象方法「比較」。'但我沒有創建一個RuleObject。我正在創建一個RuleObjectString。我在這裏做錯了什麼?在Perl中擴展對象
testobject.pl
1 #! /usr/bin/perl
2
3 use strict;
4
5 use RuleObjectString;
6
7 my $s = RuleObjectString->new();
8 $s->value('stuff goes here');
9
10 if ($s->compare('stuff')){
11 print "MATCH!\n";
12 }else{
13 print "no match :(\n";
14 }
RuleObject.pm
package RuleObject;
our @ISA = qw/Exporter/;
our @EXPORT = qw/new/;
use strict;
sub new{
my $class = shift;
my $self;
$self->{value} = undef;
bless $self;
return $self;
}
sub value{
my $self = shift;
my $value = shift;
if ($value){
$self->{value} = $value;
}else{
return $self->{value};
}
}
RuleObjectString.pm
package RuleObjectString;
our @ISA = qw/RuleObject/;
our @EXPORT = qw/compare/;
use strict;
sub compare{
my $self = shift;
my $compareto = shift;
return $self->value() =~ /$compareto/;
}
您不應該'@ EXPORT'您的類和實例方法,並且您的模塊通常不應該繼承'Exporter',除非它們具有真正的導出過程函數。 – pilcrow
對於需要導出*函數*的情況,'Sub :: Exporter'比'Exporter'好得多。但是,您應該避免從也是類定義的包中導出函數。 ' –