Perl Beginners #6に行ってきた。

ブログ、10月から更新が止まってる…。
11月、12月忙しかったからなぁ…。

今回のテーマは「配列」
(だったみたい。12月にatnd登録したっきりで、忘れていた…。

で、LTの人数が足りないということで、飛び入り参加。

何にしようかと思案して、配列を引数として使うところに絞って説明してみた。

#!/usr/bin/perl

use strict;
use warnings;

#1つ渡す
my @name = ("shinji");
&say_name(@name);

#まぁ普通
sub say_name {
  my ($name) = @_;
  print "he is ".$name."\n";
}

#2つ渡す
my @names = ("shinji","aska")
&say_names(@names);

#なんか似た行が並んだ。
sub say_names {
  my ($name1,$name2) = @_;
  print "he is ".$name1."\n";
  print "she is ".$name2."\n";  
}

#3つ渡す
my @names2 = ("shinji","aska","rei")
&say_names2(@names2);

#似た行が3行もあるよ…。
sub say_names2 {
  my ($name1,$name2,$name3) = @_;
  print "he is ".$name1."\n";
  print "she is ".$name2."\n";
  print "she is ".$name3."\n";
}

#4つ渡す
my @names3 = ("shinji","aska","rei","kaoru");
&say_names3(@names3);

#むむ…4行もある…さすがにこれは…。
sub say_names3 {
  my ($name1,$name2,$name3,$name4) = @_;
  print "he is ".$name1."\n";
  print "she is ".$name2."\n";
  print "she is ".$name3."\n";
  print "he is ".$name4."\n";
}

#ということで…

#4つ渡す ver2
my @names3_1= ("shinji","aska","rei","kaoru");
&say_names3_1(@names3_1);

#ひとまず、foreachを使って改修してみた。
#なんか$nameシリーズ多いですね…。
sub say_names3_1 {
  my ($name1,$name2,$name3,$name4) = @_;
  foreach my $name ($name1,$name2,$name3,$name4) {
    print "(s)he is ". $name."\n";
  }
}

#5つ渡す…。
my @names4 = ("shinji","aska","rei","kaoru","misato");
&say_names4(@names4);

#ぎゃー!!!
#$nameどうにかならんのー!!
sub say_names4 {
  my ($name1,$name2,$name3,$name4,$name5) = @_;
  foreach my $name ($name1,$name2,$name3,$name4,$name5) {
    print "(s)he is ". $name."\n"
  }
}

#そこで今回覚えて行ってほしいのが配列の参照渡し(リファレンス)

#配列の印、アットマーク(@)の前にバックスラッシュ(\)(Windowsでは円マーク)
my @name_ref = ("shinji","aska","rei","kaoru","misato");
&say_name_ref(\@name_ref); #バックスラッシュ!

#バックスラッシュを使って引数とすると「"メモリの位置"を1つ渡す」という処理になります。
#それから、使うときは、メモリの位置はそのまま使えませんのでドルマーク($)の前に配列の印@をおいてあげてください。
sub say_name_ref {
  my ($names) = @_; # メモリの位置を1つ引き受けます
  foreach my $name (@$names) { # $の前に@を置く
    print "(s)he is ". $name."\n"
  }
}

1;


配列の参照渡しはこんな風に使えますよ。
というお話でした。

で、時間も合ったので「おすすめモジュール」の話ということで、
『Data::Section::Simple』の話をしだしたんだけれど。

牧さんから「配列に関係ないじゃん。」

そういえば、そうだ…。

終わったあとで『List::AllUtils』とか、
配列の代名詞みたいなモジュールがあるじゃあいか!
とか思って後悔したので、ここでご紹介

List::AllUtilsList::AllUtils - search.cpan.org

配列から、ユニークな要素を取り出したり、最大とか最小の要素を取り出したり、配列の順番を混ぜたりとかいろいろできるので、かなり強力なモジュールですよ!