7. 継承による例
package My::CGI;
use strict;
use warnings;
use parent 'CGI';
sub new {
my $class = shift;
...;
my $self = $class->SUPER::new(@_);
return $self;
}
sub foobar {
my $self = shift;
$self->{foobar} = $self->param('foobar'); # これはダメ
...;
}
8. 委譲による例
package My::CGI;
use strict;
use warnings;
sub new {
my $class = shift;
my $self = bless {}, $class;
$self->{cgi} ||= CGI->new; # delegate
return $self;
}
sub foobar {
my $self = shift;
$self->{foobar} = $self->cgi->param('foobar'); # 良い
...;
}