Псевдокласс SUPER
относится к родительскому классу пакета, в котором он появляется (а не к родительскому классу объекта, который его вызывает!). У вас нет родительского класса. Добавьте родительский класс, чтобы увидеть, как он работает. Вот пример с несколькими модификациями.
#######################
package ParentSample;
use strict;
use warnings;
sub new {
my( $class, %fields ) = @_;
# some debugging statements so you can see where you are:
print "I'm in ", __PACKAGE__, " for $class\n";
# make the object in only one class
bless \%fields, $class;
}
#######################
package Sample;
use strict;
use warnings;
use base qw(ParentSample);
sub new {
my( $class ) = shift;
# some debugging statements so you can see where you are:
print "I'm in ", __PACKAGE__, " for $class\n";
my %fields = (
Debug => 0,
Error => undef,
);
# let the parent make the object
$class->SUPER::new( %fields );
}
#######################
package main;
use strict;
use warnings;
my $obj = Sample->new( cat => 'Buster' );
print "Howdy, sample\n";
Любопытно, что это сообщение об ошибке стало намного лучше в последних версиях Perl. Ваш старый Perl не помещает SUPER
в сообщение:
$ perl5.8.9 sample
Can't locate object method "new" via package "sample" at sample line 14.
$ perl5.10.1 sample
Can't locate object method "new" via package "sample" at sample line 14.
$ perl5.12.1 sample
Can't locate object method "new" via package "sample::SUPER" at sample line 14.
$ perl5.14.1 sample
Can't locate object method "new" via package "sample::SUPER" at sample line 14.