LoginSignup
2
2

More than 5 years have passed since last update.

#kichijojipm mini 初めてのPerl読書会(第2回) に参加してきました。

Last updated at Posted at 2014-11-14

@magnolia_k_ さんが主催する、Kichijoji.pmの番外編である、Kichijoji.pm mini 初めてのPerl読書会(第2回)に参加してきました。
少人数で集まって音読し、気になる所をあーでもないこーでもないと意見しあう読書会です。

第1回も参加したのですが、あーでもないこーでもないしているとなかなか読み進まず、前回は「第2章 スカラーデータ」しか読めなかったのですが、今回もあーでもないこーでもないで盛り上がり「第3章 リストと配列」だけで精一杯でした。
とは言えPerlにおいてリストと配列はわりと最初のハマりポイントなので、じっくりやれて良かったんじゃないかと思います。

会場

今回の会場は(吉祥寺になかなかいい場所がみつからない事情もあり)武蔵境駅徒歩3分くらいのコワーキングスペース「ぴこす」でした。
小奇麗でアットホームなスペースでとても居心地が良かったです。
Facebookの写真で少しだけ屋内の雰囲気もかめます (https://www.facebook.com/picos.musashisakai)

あーでもないこーでもない

リストと配列(Array)はPerlでは別物 をみなで囲んで読みなら、とにかくリストはリスト言わず、リストコンテキストって用語で使わないと混乱するよねーって話してました。

コンテキストで返り値が変わるメソッド実装はよくあるので(例えばスカラコンテキストではイテレータ、リストコンテキストでは配列を返すメソッド)
理解が浅いうちに以下のようにしてしまい、なぜだー!ってなるの結構Perl怖い話だよねーって感じでした。

my ($all) = MyDB->get_all; # (で囲んでしまったら)リストコンテキストである!
# my $all = MyDB->get_all; # 正しくはこちら

while(my $item = $all->next){
    print $item->id;
}

eachを配列に使うとインデックスを返す(>=5.12)

新しい発見としてはeachを配列に使うとインデックスを受け取ることができる機能が5.12から実装されていることが書かれていました。

use 5.012;

my @list = qw/mon tue wed thu fri sat sun/;

while ( my ( $i, $val ) = each @list ) {
  say "$i: $val";
}

名言(迷言) 事実、Perl を学ぶことのうち大きな部分を占めるのは、Larry の考え方を学ぶことなのです

ここは一同苦笑いで読書が進まない感じでした。Larryさん。。。

通常はリストを生成するために使うような式はたくさんあります。そのような式をスカラーコンテキストで使うと何が得られるでしょうか? それを知るには、作った人が言っていることを調べてください。通常、その人物とは Larry であり、ドキュメントを読めばすべてが記述されてい ます。事実、Perl を学ぶことのうち大きな部分を占めるのは、Larry の考え方を学ぶことなのです*27 。ですから、Larry のように考えられるようになれば、Perl が何をするかが理解できるように なるはずです。
*27 これはそんなに大変なことではありません。なぜなら、LarryはPerlを書く際に、あなたのような人の立場に立って、どんなものが欲しいだろうかを予想していたからです。

要は、コンテキスト重要!ってことですかね(笑)人間のコミュニケーションでもコンテキスト(文脈)はとても重要ですから。

余った時間で少しだけサブルーチン

本当は4章サブルーチンまでやるはずだったのですが、リストで盛り上がりすぎて時間が微妙になってしまい、余った時間で少しだけ僕が最近はまったサブルーチン話題を共有しました。

PerlのデプロイツールであるCinnamonを導入しようとして設定ファイルを書いていた時に、DSLがあまりに(自分には)奇妙でした。

remote {
  run "cd $deploy_to && git fetch origin && git checkout -q $branch && git submodule update --init";
} $host;

remoteがサブルーチンなのはわかりましが、引数が関数リファレンスっぽいのにsubが無いし、第二引数の前に,(カンマ)がない。なんじゃこりゃー。

ソースをみると、

sub remote (&$) {
  my ($code, $host) = @_;
  ...
}

ということでサブルーチンのプロトタイプだったんですね。
http://perl-users.jp/modern_introduction_perl/sub_prototype.html
この辺りを読んである程度理解は出来たのですが、普通に書いたほうが混乱無いと思うんですけど、プロトタイプを使うメリットって…?

remote sub {
  run "cd $deploy ..."
}, $host;

次回 サブルーチン

年内にもう一回読書会が開ければいいな、とのことなので、こんな感じであーだこーだ話したい人は是非参加していただきたく思います! (#kichijojipm か 主催の @magnolia_k_ さんをヲチすると吉)
@magnolia_k_ さんお忙しい中主催あがりがとうございました!!

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2