Hatena::Groupperl

Perl Study Memory

There is a difference between knowing the path and walking the path.

自己紹介  | 初めてのPerl 第3版  | 続・初めてのPerl 改訂版  | アーカイブ  | 参考書籍・推薦図書

 | 

2009-02-044章 リファレンス入門

4.1 多くの配列に対して同じ処理を実行するには

| はてなブックマーク - 4.1 多くの配列に対して同じ処理を実行するには - Perl Study Memory

リファレンス(参照)とは

複雑なデータ構造、オブジェクト指向プログラミング(OOP)サブルーチンを使ったマジックのための基礎です。

リファレンスは、これらすべてを実現するためにPerl5から追加された機能

  • スカラー変数は、1つの値を保持する
  • 配列は、1つ以上のスカラーの順序付きのリスト
  • ハッシュは、スカラーのキーからスカラーの値を引けるようにしたデータ集合

リファレンスは、データの複雑な相互関係を表現するに適したデータ型


持ち物チェックを例に

  • 救命胴衣(preserver)
  • 日焼け止めクリーム(sunscreen)
  • 水筒(water_bottle)
  • 防水ジャケット(jacket)
  • 船長(Skipper)
#!/usr/bin/perl                                                                                               

use strict;
use warnings;

my @required  = qw(preserver sunscreen water_bottle jacket);
my @skipper   = qw(blue_shirt hat jacket preserver sunscreen);

for my $item (@required) {
  unless (grep $item eq $_, @skipper) {
    print "skipper is missing $item.\n"
  }
}

1;

$ chmod 700 04.01.01.pl 
$ ./04.01.01.pl 
skipper is missing water_bottle.
$ 

#!/usr/bin/perl

use strict;
use warnings;
#use utf8;

my @required  = qw(preserver sunscreen water_bottle jacket);
my @gilligan  = qw(red_shirt hat lucky_socks water_bottale);

for my $item (@required) {
  unless (grep $item eq $_, @gilligan ) {
    print "gilligan is missing $item.\n";
  } 
}

my @professor = qw(sunscreen water_bottle slide_rule batteries radio);
for my $item (@required) {
  unless (grep $item eq $_, @professor) {
    print "professor is missing $item.\n";
  }
}

1;
$ chmod 700 04.01.02.pl 
$ ./04.01.02.pl 
gilligan is missing preserver.
gilligan is missing sunscreen.
gilligan is missing water_bottle.
gilligan is missing jacket.
professor is missing preserver.
professor is missing jacket.
$ 


#!/usr/bin/perl

use strict;
use warnings;

sub check_required_items {
  my $who = shift;
  my @required  = qw(preserver sunscreen water_bottle jacket);
  for my $item (@required) {
    unless (grep $item eq $_, @_){
      print "$who is missin $item.\n";
    }
  }
}

my @gilligan  = qw(red_shirt hat lucky_socks water_bottle);
check_required_items('gilligan', @gilligan);

1;

$ chmod 700 04.01.03.pl 
$ ./04.01.03.pl 
gilligan is missin preserver.
gilligan is missin sunscreen.
gilligan is missin jacket.
$ 

#!/usr/bin/perl

use strict;
use warnings;

sub check_required_items {
  my $who = shift;
  my @required  = qw(preserver sunscreen water_bottle jacket);
  for my $item (@required) {
    unless (grep $item eq $_, @_){
      print "$who is missin $item.\n";
    }
  }
}

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);

check_required_items('skipper'  , @skipper);
check_required_items('professor', @professor);
check_required_items('gilligan' , @gilligan);

1;

$ chmod 700 04.01.04.pl 
$ ./04.01.04.pl 
skipper is missin water_bottle.
professor is missin preserver.
professor is missin jacket.
gilligan is missin preserver.
gilligan is missin sunscreen.
gilligan is missin jacket.
$ 

ゲスト



トラックバック - http://perl.g.hatena.ne.jp/azurestone/20090204
 |