元は車だったのだが、人間に変えた。
package Man;
sub new{
my $this = shift;
my ( $name, $gender ) = @_ ;
print "$nameさんが誕生しました。\n" ;
my $man = {"Name" => $name,
"Gender" => $gender,
"Age" => 0,
"Money" => 0 } ;
bless $man, $this;
return $man ;
}
# デストラクタ
sub DESTROY{
my $this = shift;
print "$this->{Name}($this->{Age})さんが死にました。\n";
}
sub tosi{
$this = shift ;
$this->{Age}++;
print "$this->{Name}さんが$this->{Age}才になりました。\n\n" ;
}
sub tellage{
my $this = shift;
print "わたしは$this->{Name}、$this->{Age}才です。\n";
}
package main;
my $taro = new Man "太郎", "Male";
my $hanako = new Man "花子", "Female";
$taro->tosi;
print"\n";
$taro->tosi;
$hanako->tellage;
$hanako->tosi;
$hanako->tosi;
$hanako->tosi;
$hanako->tosi;
$hanako->tellage;
print"\n";
実行した結果。
C:\>perl man.pl 太郎さんが誕生しました。 花子さんが誕生しました。 太郎さんが1才になりました。 太郎さんが2才になりました。 わたしは花子、0才です。 花子さんが1才になりました。 花子さんが2才になりました。 花子さんが3才になりました。 花子さんが4才になりました。 わたしは花子、4才です。 太郎(2)さんが死にました。 花子(4)さんが死にました。 C:\>
最後の「死にました」は、何もしていないのに表示される。
終了するときに自動的にデストラクタが動いているようだ。
こういうものは、「C++入門」とかを読んで何度かやってみたことがあるが、いつもサンプルを写して、一部を今回のように変えて、「フーン・・・」で終わっている。おもしろそうだな、とは思うのだが・・・。