元は車だったのだが、人間に変えた。
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++入門」とかを読んで何度かやってみたことがあるが、いつもサンプルを写して、一部を今回のように変えて、「フーン・・・」で終わっている。おもしろそうだな、とは思うのだが・・・。