コンストラクタの継承
親 = Kaizoku.pm
子 = onepiece.cgi
Kaizoku.pm
sub new {
my $class = shift;
my %args = @_;
my $self = {
tmpl_dir => $args{tmpl_dir},
tmpl_message => $args{tmpl_message}
};
bless $self, $class;
}
これが、親のコンストラクタです。ここに、tmpl_formという属性を付け加えたい
のですが、継承してオーバーライドする必要があります。
onepiece.pm
package GestBook;
use base qw(AppBase);
sub new {
my $class = shift;
my %args = @_;
my $self = $class->SUPER::new(%args);
tmpl_form => $args{tmpl_from};
return $self;
}
package GestBook; use base qw(AppBase);
親モジュールを使います、と宣言。
my $class = shift; my %args = @_;
親モジュールと同じように書きます。$slef = shift;としないように。
%argsをうけとらないと、global symbolエラーがでますよ。
my $self = $class->SUPER::new(%args);
オーバライドの書き方は前も勉強しました。
でもこう書いてもどうしてもうまくいかなかったのは、
%argsを渡していなかったからでした。
tmpl_form => $args{tmpl_from};
付け加えたい属性を記入します。
return $self;
blessしません。blessは親がするので、ここでは$selfの値を返すだけです。