25 Apr 2009

初めてのPerl

Perl入門書の定番、通称リャマ本です。ほかの言語をやったことがあって、Linuxを使ったことがある人ならば、さくっと読める内容です。練習問題がよかったですね。難易度はすごくやさしいんですが、適度に実践的なので、知識と応用の橋渡しとして優れていると思いました。最初に全体を流し読みして、次に練習問題を解きながら、忘れたところを戻りつつ復習するという読み方をしたのですが、効果的な方法だったと思います。

以下はperlという言語自体の感想です。perlは省略した書き方というのがすごく多くあり、処理系がいろいろと裏でうまくやってくれるので、最初はちょっと気持ち悪いなあと思いました。ただ、いったんそういった省略されている書き方や動作がわかってくると、少々複雑な処理もさくっとかけちゃうのがすごいです。たとえばファイルから一行ずつ読み込んで何かするという処理は、ダイアモンド演算子なんかを使うとほんとにすぐ書けます。自分の中でのコードを書きはじめるしきい値がものすごく下がるので、日常のちょっとした作業をささっとやらせるにはもってこいです。たぶんCPANには便利なライブラリがたくさんあって、あんなことやこんなことまで超簡単にできちゃうんじゃないかとわくわくしています。知らない人がperlのコードを見ても、何をやっているのか理解できないと思いますが、一度わかるととても便利な言語ですね。

付録Bの "リャマを超えて" では、本書でカバーできなかった機能について少しずつ言及されています。OOとか無名関数とかプロセス間通信とか、他言語の便利な機能がカバーされててすごいなと感じると同時に、まだまだやることがたくさんあるんだなと思った次第です。

リャマの次はどうするか

今後は以下の3つをミックスさせながら学んでいけばいいかなと考えています。

  • 手を動かす。何か作る。
  • さらに定番書を読んでいく。
  • モダンperlについて学ぶ。
手を動かす。何か作る。

基礎知識は身に付いたので、手を動かす段階です。まずは、gsocのプロジェクトの勉強にもなるので、Xapianを使って何か作ります。あとは日常的なルーチンワークを処理するスクリプトをその都度書いていくことですね。退屈と単純作業は悪です。僕はまだ結構単純作業に気づけない場合も多いので、ちょっとでも自動化できる・楽できる作業はないかと、より意識する必要がありますね。

さらに定番書を読んでいく。

リャマを終えたので、次はラクダですね。

プログラミングPerl〈VOLUME1〉

プログラミングPerl〈VOLUME1〉

      <li><span class="hatena-asin-detail-label">作者:</span> <a href="http://d.hatena.ne.jp/keyword/%A5%E9%A5%EA%A1%BC%A5%A6%A5%A9%A1%BC%A5%EB" class="keyword">ラリーウォール</a>,<a href="http://d.hatena.ne.jp/keyword/%A5%B8%A5%E7%A5%F3%A5%AA%A1%BC%A5%EF%A5%F3%A5%C8" class="keyword">ジョンオーワント</a>,<a href="http://d.hatena.ne.jp/keyword/%A5%C8%A5%E0%A5%AF%A5%EA%A5%B9%A5%C1%A5%E3%A5%F3%A5%BB%A5%F3" class="keyword">トムクリスチャンセン</a>,<a href="http://d.hatena.ne.jp/keyword/Larry%20Wall" class="keyword">Larry Wall</a>,<a href="http://d.hatena.ne.jp/keyword/Jon%20Orwant" class="keyword">Jon Orwant</a>,<a href="http://d.hatena.ne.jp/keyword/Tom%20Christiansen" class="keyword">Tom Christiansen</a>,<a href="http://d.hatena.ne.jp/keyword/%B6%E1%C6%A3%B2%C5%C0%E3" class="keyword">近藤嘉雪</a></li>
    
      <li><span class="hatena-asin-detail-label">出版社/メーカー:</span> <a href="http://d.hatena.ne.jp/keyword/%A5%AA%A5%E9%A5%A4%A5%EA%A1%BC%A1%A6%A5%B8%A5%E3%A5%D1%A5%F3" class="keyword">オライリー・ジャパン</a></li>
    
      <li><span class="hatena-asin-detail-label">発売日:</span> 2002/09</li>
                                                      <li><span class="hatena-asin-detail-label">メディア:</span> 単行本</li>
      <li><span class="hatena-asin-detail-label">購入</span>: 8人 <span class="hatena-asin-detail-label">クリック</span>: 245回</li>
      <li><a href="http://d.hatena.ne.jp/asin/4873110963" target="_blank">この商品を含むブログ (128件) を見る</a></li>
    </ul>
    

いずれは、ここにある本を一通り押さえたいです。

Perl関連書籍の書評 - Perl-users.jp

モダンperlについて学ぶ。

モダンperlという潮流があります。昔風の保守性の低い書き方ではなく、より進化したよい書き方、あるいは良いライブラリを使おうという流れです。上記の定番書もほとんど昔風の書き方なので、”モダン”な書き方を学ぶのが良いようです。

Perl「言語」初心者がモダンなPerlを高速に学ぶ方法 - dann@webdev - dann’s portal

連載:モダンPerlの世界へようこそ|gihyo.jp … 技術評論社

モダンPerl入門 (CodeZine BOOKS)

モダンPerl入門 (CodeZine BOOKS)

      <li><span class="hatena-asin-detail-label">作者:</span> <a href="http://d.hatena.ne.jp/keyword/%CB%D2%C2%E7%CA%E5" class="keyword">牧大輔</a></li>
    
      <li><span class="hatena-asin-detail-label">出版社/メーカー:</span> <a href="http://d.hatena.ne.jp/keyword/%E6%C6%B1%CB%BC%D2" class="keyword">翔泳社</a></li>
    
      <li><span class="hatena-asin-detail-label">発売日:</span> 2009/02/10</li>
                                                      <li><span class="hatena-asin-detail-label">メディア:</span> 大型本</li>
      <li><span class="hatena-asin-detail-label">購入</span>: 25人 <span class="hatena-asin-detail-label">クリック</span>: 534回</li>
      <li><a href="http://d.hatena.ne.jp/asin/4798119172" target="_blank">この商品を含むブログ (108件) を見る</a></li>
    </ul>
    

とりあえず、手元にあるWEB+DB press vol.48 にモダンプログラミング入門という特集があるので、これを読んでみます。

WEB+DB PRESS Vol.48

WEB+DB PRESS Vol.48

      <li><span class="hatena-asin-detail-label">作者:</span> <a href="http://d.hatena.ne.jp/keyword/%C2%E7%C2%F4%CF%C2%B9%A8" class="keyword">大沢和宏</a>,<a href="http://d.hatena.ne.jp/keyword/%B9%E2%B6%B6%C0%AC%B5%C1" class="keyword">高橋征義</a>,<a href="http://d.hatena.ne.jp/keyword/%BB%B3%CB%DC%CD%DB%CA%BF" class="keyword">山本陽平</a>,<a href="http://d.hatena.ne.jp/keyword/%B9%E2%C4%CD%F4%A3" class="keyword">高塚遙</a>,<a href="http://d.hatena.ne.jp/keyword/%B9%E2%CE%D3%C5%AF" class="keyword">高林哲</a>,<a href="http://d.hatena.ne.jp/keyword/%BE%AE%BB%F4%C3%C6" class="keyword">小飼弾</a>,<a href="http://d.hatena.ne.jp/keyword/%A4%CF%A4%DE%A4%C1%A4%E42" class="keyword">はまちや2</a>,<a href="http://d.hatena.ne.jp/keyword/%B3%D1%C5%C4%C4%BE%B9%D4" class="keyword">角田直行</a>,<a href="http://d.hatena.ne.jp/keyword/%C5%C4%CA%A5%BD%E3%B0%EC" class="keyword">田淵純一</a>,<a href="http://d.hatena.ne.jp/keyword/%B0%CB%CC%EE%CD%A7%B5%AA" class="keyword">伊野友紀</a>,<a href="http://d.hatena.ne.jp/keyword/%CE%EB%CC%DA%B7%BC%BD%A4" class="keyword">鈴木啓修</a>,<a href="http://d.hatena.ne.jp/keyword/%B8%C5%C3%AB%CD%EC%BF%CD" class="keyword">古谷洛人</a>,<a href="http://d.hatena.ne.jp/keyword/%B0%CB%C6%A3%C4%BE%CC%E9" class="keyword">伊藤直也</a>,<a href="http://d.hatena.ne.jp/keyword/%C5%C4%C3%E6%C5%AF" class="keyword">田中哲</a>,<a href="http://d.hatena.ne.jp/keyword/%C2%C0%C5%C4%B0%EC%BC%F9" class="keyword">太田一樹</a>,<a href="http://d.hatena.ne.jp/keyword/%BE%BE%C5%C4%CC%C0" class="keyword">松田明</a>,<a href="http://d.hatena.ne.jp/keyword/%C4%E1%B2%AC%C4%BE%CC%E9" class="keyword">鶴岡直也</a>,<a href="http://d.hatena.ne.jp/keyword/%BA%B4%C6%A3%CE%B5%B0%EC" class="keyword">佐藤竜一</a>,<a href="http://d.hatena.ne.jp/keyword/cho45%28%A4%B5%A4%C8%A4%A6%29" class="keyword">cho45(さとう)</a>,<a href="http://d.hatena.ne.jp/keyword/%B5%C8%C5%C4%BD%D3%CC%C0" class="keyword">吉田俊明</a>,<a href="http://d.hatena.ne.jp/keyword/%CA%A1%C5%E7%B9%EE%B5%B1" class="keyword">福島克輝</a>,<a href="http://d.hatena.ne.jp/keyword/%C5%CF%C9%F4%B9%AD%BB%D6" class="keyword">渡部広志</a>,<a href="http://d.hatena.ne.jp/keyword/%CC%F0%BA%EE%B9%C0" class="keyword">矢作浩</a>,<a href="http://d.hatena.ne.jp/keyword/%BF%B9%C5%C4%C1%CF" class="keyword">森田創</a>,<a href="http://d.hatena.ne.jp/keyword/%E5%D1%BD%D3%B5%AE" class="keyword">縣俊貴</a>,<a href="http://d.hatena.ne.jp/keyword/%C2%E7%C4%CD%C3%CE%CD%CE" class="keyword">大塚知洋</a>,<a href="http://d.hatena.ne.jp/keyword/%C9%F0%BC%D4%BE%BD%B5%AA" class="keyword">武者晶紀</a>,<a href="http://d.hatena.ne.jp/keyword/%A5%DF%A5%C3%A5%AF" class="keyword">ミック</a>,<a href="http://d.hatena.ne.jp/keyword/%B2%BC%B2%AC%BD%A8%B9%AC" class="keyword">下岡秀幸</a>,<a href="http://d.hatena.ne.jp/keyword/nanto_vi" class="keyword">nanto_vi</a>,<a href="http://d.hatena.ne.jp/keyword/%C5%C4%C3%E6%CD%CE%B0%EC%CF%BA" class="keyword">田中洋一郎</a>,<a href="http://d.hatena.ne.jp/keyword/WEB%2BDB%20PRESS%CA%D4%BD%B8%C9%F4" class="keyword">WEB+DB PRESS編集部</a></li>
    
      <li><span class="hatena-asin-detail-label">出版社/メーカー:</span> <a href="http://d.hatena.ne.jp/keyword/%B5%BB%BD%D1%C9%BE%CF%C0%BC%D2" class="keyword">技術評論社</a></li>
    
      <li><span class="hatena-asin-detail-label">発売日:</span> 2008/12/22</li>
                                                      <li><span class="hatena-asin-detail-label">メディア:</span> 大型本</li>
      <li><span class="hatena-asin-detail-label">購入</span>: 4人 <span class="hatena-asin-detail-label">クリック</span>: 32回</li>
      <li><a href="http://d.hatena.ne.jp/asin/4774136913" target="_blank">この商品を含むブログ (32件) を見る</a></li>
    </ul>
    

あとはplaggerのコードを読むのが良いようです。

Plagger - Trac

WEB+DB Press vol.48 モダンプログラミング入門 Perl編

WEB+DB PRESS Vol.48

WEB+DB PRESS Vol.48

      <li><span class="hatena-asin-detail-label">作者:</span> <a href="http://d.hatena.ne.jp/keyword/%C2%E7%C2%F4%CF%C2%B9%A8" class="keyword">大沢和宏</a>,<a href="http://d.hatena.ne.jp/keyword/%B9%E2%B6%B6%C0%AC%B5%C1" class="keyword">高橋征義</a>,<a href="http://d.hatena.ne.jp/keyword/%BB%B3%CB%DC%CD%DB%CA%BF" class="keyword">山本陽平</a>,<a href="http://d.hatena.ne.jp/keyword/%B9%E2%C4%CD%F4%A3" class="keyword">高塚遙</a>,<a href="http://d.hatena.ne.jp/keyword/%B9%E2%CE%D3%C5%AF" class="keyword">高林哲</a>,<a href="http://d.hatena.ne.jp/keyword/%BE%AE%BB%F4%C3%C6" class="keyword">小飼弾</a>,<a href="http://d.hatena.ne.jp/keyword/%A4%CF%A4%DE%A4%C1%A4%E42" class="keyword">はまちや2</a>,<a href="http://d.hatena.ne.jp/keyword/%B3%D1%C5%C4%C4%BE%B9%D4" class="keyword">角田直行</a>,<a href="http://d.hatena.ne.jp/keyword/%C5%C4%CA%A5%BD%E3%B0%EC" class="keyword">田淵純一</a>,<a href="http://d.hatena.ne.jp/keyword/%B0%CB%CC%EE%CD%A7%B5%AA" class="keyword">伊野友紀</a>,<a href="http://d.hatena.ne.jp/keyword/%CE%EB%CC%DA%B7%BC%BD%A4" class="keyword">鈴木啓修</a>,<a href="http://d.hatena.ne.jp/keyword/%B8%C5%C3%AB%CD%EC%BF%CD" class="keyword">古谷洛人</a>,<a href="http://d.hatena.ne.jp/keyword/%B0%CB%C6%A3%C4%BE%CC%E9" class="keyword">伊藤直也</a>,<a href="http://d.hatena.ne.jp/keyword/%C5%C4%C3%E6%C5%AF" class="keyword">田中哲</a>,<a href="http://d.hatena.ne.jp/keyword/%C2%C0%C5%C4%B0%EC%BC%F9" class="keyword">太田一樹</a>,<a href="http://d.hatena.ne.jp/keyword/%BE%BE%C5%C4%CC%C0" class="keyword">松田明</a>,<a href="http://d.hatena.ne.jp/keyword/%C4%E1%B2%AC%C4%BE%CC%E9" class="keyword">鶴岡直也</a>,<a href="http://d.hatena.ne.jp/keyword/%BA%B4%C6%A3%CE%B5%B0%EC" class="keyword">佐藤竜一</a>,<a href="http://d.hatena.ne.jp/keyword/cho45%28%A4%B5%A4%C8%A4%A6%29" class="keyword">cho45(さとう)</a>,<a href="http://d.hatena.ne.jp/keyword/%B5%C8%C5%C4%BD%D3%CC%C0" class="keyword">吉田俊明</a>,<a href="http://d.hatena.ne.jp/keyword/%CA%A1%C5%E7%B9%EE%B5%B1" class="keyword">福島克輝</a>,<a href="http://d.hatena.ne.jp/keyword/%C5%CF%C9%F4%B9%AD%BB%D6" class="keyword">渡部広志</a>,<a href="http://d.hatena.ne.jp/keyword/%CC%F0%BA%EE%B9%C0" class="keyword">矢作浩</a>,<a href="http://d.hatena.ne.jp/keyword/%BF%B9%C5%C4%C1%CF" class="keyword">森田創</a>,<a href="http://d.hatena.ne.jp/keyword/%E5%D1%BD%D3%B5%AE" class="keyword">縣俊貴</a>,<a href="http://d.hatena.ne.jp/keyword/%C2%E7%C4%CD%C3%CE%CD%CE" class="keyword">大塚知洋</a>,<a href="http://d.hatena.ne.jp/keyword/%C9%F0%BC%D4%BE%BD%B5%AA" class="keyword">武者晶紀</a>,<a href="http://d.hatena.ne.jp/keyword/%A5%DF%A5%C3%A5%AF" class="keyword">ミック</a>,<a href="http://d.hatena.ne.jp/keyword/%B2%BC%B2%AC%BD%A8%B9%AC" class="keyword">下岡秀幸</a>,<a href="http://d.hatena.ne.jp/keyword/nanto_vi" class="keyword">nanto_vi</a>,<a href="http://d.hatena.ne.jp/keyword/%C5%C4%C3%E6%CD%CE%B0%EC%CF%BA" class="keyword">田中洋一郎</a>,<a href="http://d.hatena.ne.jp/keyword/WEB%2BDB%20PRESS%CA%D4%BD%B8%C9%F4" class="keyword">WEB+DB PRESS編集部</a></li>
    
      <li><span class="hatena-asin-detail-label">出版社/メーカー:</span> <a href="http://d.hatena.ne.jp/keyword/%B5%BB%BD%D1%C9%BE%CF%C0%BC%D2" class="keyword">技術評論社</a></li>
    
      <li><span class="hatena-asin-detail-label">発売日:</span> 2008/12/22</li>
                                                      <li><span class="hatena-asin-detail-label">メディア:</span> 大型本</li>
      <li><span class="hatena-asin-detail-label">購入</span>: 4人 <span class="hatena-asin-detail-label">クリック</span>: 32回</li>
      <li><a href="http://d.hatena.ne.jp/asin/4774136913" target="_blank">この商品を含むブログ (32件) を見る</a></li>
    </ul>
    

読みました。へえと納得することが多く面白かったです。

ドキュメント

ドキュメントがめちゃめちゃ膨大ですね。びっくりしました。これだけあればわざわざググる必要が減るのでのですばらしい。

組み込み関数、標準機能

openをするときはファイルハンドルを my $fh などとしてスコープを切る、forでデフォルト変数を使わずちゃんと名前を付けるなど、確かにその方がいいよなあというトピックでした。

evalで例外処理をするのはリャマにも少し書いてありましたね。どこかで聞いたことがあったのか、use strict;とuse warnings;のことは知っていました。

localに関して忘れていたので復習します。

リャマ本いわく、localは”save”と考えるとわかりやすい。local演算子は、あるスコープの中で、グローバルの変数の中身を一時的に保存しておき(”save”)、中身を書き換えて使えるようにします。またlocalで変更した値は、そのスコープを抜けるともとに戻ります。よってある関数内などで値を一時的に入れ替える目的で使用できます。

my %hash = (name => ‘cou929’);

sub foo { print($hash{name}\n); }

sub bar { local $hash{name} = ‘cou’; foo(); }

print($hash{name}\n); # cou929 bar(); # cou print($hash{name}\n); # cou929

CPAN

たくさんあるモジュールからどう選ぶかという問題。plaggerやcatalystで使われているモジュールはデファクトなので良い。また、こういう解説記事もあります。

CPANモジュールの選び方 - モダンなPerl入門 - モダンなPerl入門

あと、Mooseというのが去年はとても注目されていたらしいです。

Dave Rolsky / Moose-0.61 - search.cpan.org

いずれは自作のモジュールを投稿したりして、コミュニティに貢献したいです。

テスト

テストは楽しいので好きです。Test::Moreは使ったことがありました。紹介されていたサイトも偶然ですが見たことがありました。

特集:Happy Testing Perl|gihyo.jp … 技術評論社

コミュニティ

shibuya.pmなどのPerl Mongers、YAPC::Asia、IRCやWassr、JPAが紹介されていました。IRCはfreenodeの#shibuya.pmや#yapc.asia-jaが活発なようです。