2012年11月5日月曜日

開発環境

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

その他参考書籍

2.

コード(TextWrangler)

sample.pl

#!/usr/bin/env perl
use strict;
use warnings;
use utf8;
use 5.016;
binmode STDIN, ':utf8';
binmode STDOUT, ':utf8';

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

{package Person;
  our @ISA = qw(LivingCreature);
  sub sound{ "hmmm" }
}

{package Cow;
  our @ISA = qw(Animal);
  sub sound{'mooo'}
}

{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;
    $class->SUPER::speak;
    print "[but you can barely hear it!]\n";
  }
}

print "小動物の名前(Cow/Horse/Sheep/Mouse)を入力(空文字で終了)\n";
my @backyard = ();
while(1){
  chomp(my $animal = <STDIN>);
  given($animal){
    when(/^\s*$/){ last;}
    when(/cow/i){$animal = "Cow";}
    when(/horse/i){$animal = "Horse";}
    when(/sheep/i){$animal = "Sheep";}
    when(/mouse/i){$animal = "Mouse";}
    default {print "入力を確認してください\n"; next;}
  }
  push @backyard, $animal;
}

map{ $_->speak } @backyard;
Person->speak;
Person->speak("Hello, Perl!");

入出力結果(Terminal)

$ ./sample.pl
小動物の名前(Cow/Horse/Sheep/Mouse)を入力(空文字で終了)
cow
horse
sheep
mouse

a Cow goes mooo!
a Horse goes neigh!
a Sheep goes baaaah!
a Mouse goes squeak!
[but you can barely hear it!]
a Person goes hmmm!
a Person goes Hello, Perl!
$

0 コメント:

コメントを投稿