Вы вообще не наследуете MySubclass
от MyClass
- MySubClass
является пользователем MyClass
. То, что вы делаете, - это переопределение части поведения из MyClass
, но вы будете путать себя, только если будете думать об этом как о наследовании, потому что это не так (например: где ваш конструктор?) Я не могу понять то, что вы пытались сделать, пока я не проигнорировал все, что код делал , и просто прочитал ваше описание того, что вы хотите, чтобы произошло.
Хорошо, у вас есть класс, который импортирует некоторые символы - некоторые функции и некоторые переменные:
package MyClass;
use strict;
use warnings;
use Exporter 'import'; # gives you Exporter's import() method directly
our @EXPORT_OK = qw/ many variables & functions/;
our %EXPORT_TAGS = (all => \@EXPORT_OK );
our ($ME, $list, $of, $vars);
sub my_func {
}
sub other_func {
}
1;
и затем вы пишете класс, который импортирует все из MyClass, снова импортирует все это обратно, но заменяет одну функцию на другую:
package MyBetterclass;
use strict;
use warnings;
use Exporter 'import'; # gives you Exporter's import() method directly
our @EXPORT_OK = qw/ many variables & functions /;
our %EXPORT_TAGS = (all => \@EXPORT_OK );
use MyClass ':all';
sub my_func {
# new definition
}
1;
Вот и все! Обратите внимание, что я включил строгую проверку и предупреждения и изменил имена «методов», которые на самом деле являются функциями.
Кроме того, я не использовал use vars
(документация говорит, что он устарел, так что это большой красный флаг, если вы все еще хотите использовать его, не разбираясь в его механике).