2011年8月6日土曜日

開発環境

  • 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) の11章(オブジェクト入門), 11.11(練習問題)、2を解いてみる。

 

2.

コード(TextWrangler)

#!/usr/bin/perl
use strict;
use warnings;

{ package LivingCreature;
  sub speak{
    my $class = shift;
    if(@_){
      print "a $class goes \"@_\"\n";
    }else{
      print "a $class goes ", $class->sound, "!\n";
    }
  }
}

{ package Animal;
  @Animal::ISA = qw(LivingCreature);
  sub speak{
    my $class = shift;
    # 小動物は話は出来ないと表示
    if (@_){
      print "a $class can't speak!\n";
    } else {
     # 小動物の鳴き声を出力
      $class->SUPER::speak;
    }
  }
}

{ package Person;
  @Person::ISA = qw(LivingCreature);
  # ハミング
  sub sound{ 'hum' }
}

{ package Cow;
  @Cow::ISA = qw(Animal);
  sub sound{ 'moooo' }
}

{ package Horse;
  @Horse::ISA = qw(Animal);
  sub sound{ 'neigh' }
}

{ package Sheep;
  @Sheep::ISA = qw(Animal);
  sub sound{ 'baaaah' }
}

{ package Mouse;
  @Mouse::ISA = qw(Animal);
  sub sound{ 'squeak' }
  sub speak{
    my $class = shift;
    if (@_){
      print "a $class can't speak!\n";
    } else {
      $class->SUPER::speak;
      print "[but you can barely hear it!]\n";
    }
  }
}

# 問題の試行
# 言うべきことを与えないでPersonを呼び出し
my $message="Hello, World!";
Person->speak;
# 言うべきことを与えてPersonを呼び出し
Person->speak($message);

# 一応他の小動物も確認
my @animals = qw(Cow Horse Sheep Mouse);
foreach (@animals){
  # 引数を与えない場合(soundが呼び出される)
  $_->speak;
  # 引数を与えた場合(話はできない)
  $_->speak($message);
}

入出力結果(Terminal)

0 コメント:

コメントを投稿