開発環境
- Mac OS X Snow Leopard (OS)
- TextWrangler(Text Editor) (いずれはBBEditを入手したい!)
- Script言語:Perl
『続・初めてのPerl 改訂版』(Randal L. Schwartz, brian d foy, Tom Phoenix 著、伊藤 直也、田中 慎司、吉川 英興 監訳、株式会社ロングテール/長尾 高弘 訳、オライリー・ジャパン、2006年、ISBN4-87311-305-9) の13章(オブジェクトのデストラクション), 13.8(練習問題)、1を解いてみる。
1.
コード(TextWrangler)
#!/usr/bin/perl
use strict;
use warnings;
{ package Animal;
use Carp qw(croak);
sub named{
ref(my $class = shift) and croak "class name needed";
my $name = shift;
my $self = { Name => $name};
bless $self, $class;
}
sub name{
my $either = shift;
ref $either
? $either->{Name}
: "an unnamed $either";
}
sub DESTROY{
my $self = shift;
print '[', $self->name, " has died.]\n";
}
}
{ package Horse;
@Horse::ISA = qw(Animal);
sub DESTROY{
my $self = shift;
$self->SUPER::DESTROY;
print "[", $self->name, " has gone off to the glue factory.]\n";
}
}
{ package RaceHorse;
@RaceHorse::ISA = qw(Horse);
dbmopen (our %STANDINGS, "standings", 0666) or die;
sub named{
my $self = shift->SUPER::named(@_);
my $name = $self->name;
my @standings = split ' ', $STANDINGS{$name} || "0 0 0 0";
@$self{qw(wins places shows losses)} = @standings;
$self;
}
sub DESTROY{
my $self = shift;
$STANDINGS{$self->name} = "@$self{qw(wins places shows losses)}";
$self->SUPER::DESTROY;
}
sub won { shift->{wins}++;}
sub placed {shift->{places}++;}
sub showed {shift->{shows}++;}
sub lost{shift->{losses}++;}
sub standings{
my $self =shift;
join ", ", map "$self->{$_} $_", qw(wins places shows losses);
}
}
my $runner = RaceHorse->named('Billy Boy');
$runner->won;
print $runner->name, ' has standings ', $runner->standings, ".\n";
入出力結果(Terminal)
ググりつつ、解答を見つつ、なんとかプログラムを完成させた。問題のプログラムを4回実行すると、4回の勝利が表示されたしとりあえずあってるのかな〜
0 コメント:
コメントを投稿