Class::Data::Inheritableを遊んでみる
ご無沙汰だった遊んでみるシリーズ。
今回はClass::Data::Inheritableです。
http://search.cpan.org/dist/Class-Data-Inheritable/lib/Class/Data/Inheritable.pmより。
id:naoya氏がhttp://d.hatena.ne.jp/naoya/20060109/1136812096でClass::Data::Inheritableを取り上げられてますのでそちらもご覧下さい。
では、私も試して見ます。
例では親クラスNeko.pmで定義したハッシュをNeko::Nyanko.pmで使い、
Neko.pmで定義した配列をNeko::Tama.pmで使います。
こんなの↓
./Neko.pm
package Neko;
use strict;
use warnings;
use base 'Class::Data::Inheritable';
my %stat = (
speak => '((=゚Д゚=)ニャー',
dash => ' ε=ε=ε=ε=ε=((=゚Д゚=)',
stop => ' ε=ε=ε=(=゚Д゚=)),,,ピタァ!',
sleep => '(ρД-).。o○ ',
);
my @toy = (
'ねこじゃらし',
'紐',
'ボール',
);
__PACKAGE__->mk_classdata(stat => \%stat);
__PACKAGE__->mk_classdata(toy => \@toy);
sub new {
my($class,$self)=(shift,{@_});
bless($self,$class);
$self;
}
1;
./Neko::Nyanko.pm
package Neko::Nyanko;
use strict;
use warnings;
use base 'Neko';
sub speak {
my $self = shift;
$self->stat->{speak};
}
sub dash {
my $self = shift;
$self->stat->{dash};
}
sub stop {
my $self = shift;
$self->stat->{stop};
}
sub sleep {
my $self = shift;
$self->stat->{sleep};
}
1;
./Neko::Tama.pm
package Neko::Tama;
use strict;
use warnings;
use base 'Neko';
sub play {
my $self = shift;
print $_,"\n" for @{$self->toy};
}
1;
./test.pl
#! /usr/local/bin/perl
use strict;
use warnings;
use Neko::Nyanko;
use Neko::Tama;
my $n = Neko::Nyanko->new;
print $n->speak,"\n";
print $n->dash,"\n";
print $n->stop,"\n";
print $n->sleep,"\n";
my $t = Neko::Tama->new;
$t->play;
実行結果
% test.pl
((=゚Д゚=)ニャー
ε=ε=ε=ε=ε=((=゚Д゚=)
ε=ε=ε=(=゚Д゚=)),,,ピタァ!
(ρД-).。o○
ねこじゃらし
紐
ボール
%
このようにNeko.pmで持っているクラスデータを継承している子クラスで使用することができますた。
以上。
いつもながら役にたたない解説ですが自分へのメモと致しまして^^;