このブログを検索

2010/11/05

オブジェクト指向@perl

これもほぼ丸パクリである。

元は車だったのだが、人間に変えた。

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