Hatena::ブログ(Diary)

フリーフォーム フリークアウト Twitter

2009-04-25

初めてのPerl

| 11:46 |

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

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

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

リャマの次はどうするか

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

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

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

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

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

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

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

モダンperlについて学ぶ。

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

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

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

モダンPerl入門 (CodeZine BOOKS)

モダンPerl入門 (CodeZine BOOKS)

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

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

Plagger - Trac

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

| 13:37 |

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

ドキュメント

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

組み込み関数、標準機能

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

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

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

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

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

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

テスト

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

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

コミュニティ

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