2012年10月20日土曜日

開発環境

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

その他参考書籍

2.

異なる参照先は1つで、${$ginger[2]}[1]。

リファレンス入門(grepでのサイズによるフィルタリング、map)のコードをい再利用。

コード(TextWrangler)

sample.pl

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

sub check_required_items{
  my $who = shift;
  my $items = shift;
  
  my @required = qw(presserver sunscreen water_bottle jacket);
  my @missing = ();
  for my $item(@required){
    unless (grep $item eq $_, @$items){
      print "$who is missing $item.\n";
      push @missing, $item;
    }
  }
  if(@missing){
    print "Adding @missing to @$items for $who.\n";
    push @$items, @missing;
  }
}

sub check_items_for_all{
  my $all = shift;
  for(keys %$all){
    check_required_items($_, $all->{$_});
  } 
}

my @gilligan = qw(red_shirt hat lucky_socks water_bottle);
my @skipper = qw(blue_shirt hat jacket preserver sunscreen);
my @professor = qw(sunscreen water_bottle slide_rule batteries radio);
my %all = (
  Gilligan => \@gilligan,
  Skipper => \@skipper,
  Professor => \@professor,
);
check_items_for_all(\%all);

入出力結果(Terminal)

$ ./sample.pl
Gilligan is missing presserver.
Gilligan is missing sunscreen.
Gilligan is missing jacket.
Adding presserver sunscreen jacket to red_shirt hat lucky_socks water_bottle for Gilligan.
Skipper is missing presserver.
Skipper is missing water_bottle.
Adding presserver water_bottle to blue_shirt hat jacket preserver sunscreen for Skipper.
Professor is missing presserver.
Professor is missing jacket.
Adding presserver jacket to sunscreen water_bottle slide_rule batteries radio for Professor.
$

0 コメント:

コメントを投稿