2012年5月2日水曜日

開発環境

『続・初めてのPerl 改訂版』(Randal L. Schwartz, brian d foy, Tom Phoenix 著、伊藤 直也田中 慎司吉川 英興 監訳、株式会社ロングテール/長尾 高弘 訳、オライリー・ジャパン、2006年、ISBN4-87311-305-9) の11章(オブジェクト入門), 11.11(練習問題)1を解いてみる。

1.

やり方の1つ。(「やり方は何通りもある」(TIMTOWTDI(There Is More Than One Way To Do It.)))

コード(TextWrangler)

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

{ package Animal;
  sub speak{
    my $class = shift;
    print "a $class goes ", $class->sound, "!\n";
  }
}

{ package Cow;
  our @ISA = qw(Animal);
  sub sound { "moooo" }
}

{ package Horse;
  our @ISA = qw(Animal);
  sub sound { "neigh" }
}

{ package Sheep;
  our @ISA = qw(Animal);
  sub sound { "baaaah" }
}

{ package Mouse;
  our @ISA = qw(Animal);
  sub sound { "squeak" }
  sub speak{
    my $class = shift;
    Animal::speak($class);
    print "[but you can barely hear it!]\n";
  }
}

my @backyard = ();
while(1){
  print "小動物(Cow/Horse/Sheep/Mouse)を入力\n";
  chomp(my $animal = <STDIN>);
  unless($animal =~ /^(Cow|Horse|Sheep|Mouse|\s*)$/){
    print "入力内容を確認してください。\n";
    next;
  }
  last if $animal =~ /^\s*$/;
  push @backyard, $animal;
}
for(@backyard){
  $_->speak;
}

入出力結果(Terminal)

$ perl sample.pl
小動物(Cow/Horse/Sheep/Mouse)を入力
Cow
小動物(Cow/Horse/Sheep/Mouse)を入力
Horse
小動物(Cow/Horse/Sheep/Mouse)を入力
Sheep
小動物(Cow/Horse/Sheep/Mouse)を入力
Mouse
小動物(Cow/Horse/Sheep/Mouse)を入力
Dog  
入力内容を確認してください。
小動物(Cow/Horse/Sheep/Mouse)を入力
Sheep
小動物(Cow/Horse/Sheep/Mouse)を入力
Mouse
小動物(Cow/Horse/Sheep/Mouse)を入力

a Cow goes moooo!
a Horse goes neigh!
a Sheep goes baaaah!
a Mouse goes squeak!
[but you can barely hear it!]
a Sheep goes baaaah!
a Mouse goes squeak!
[but you can barely hear it!]
$

0 コメント:

コメントを投稿