きっかけ
最近、Perlに目覚めてしまいました。
きっかけはMacbookで開発するようになり、ちょっとしたスクリプトを書かないといけない機会がぼちぼちでてきたことです。
これまでWindowsマシンで仕事してきていたので、何となく調べながらやっているとシェルスクリプトの話になって、そこから芋づる式にPerlに当たったように思います。
前に一度文法書を読んだ時はしっくりこなかったので継続していませんでしたが、今勉強し直すときれいに線でつながるようになり、とても楽しく学べています。
あと、「Let Over Lambda」でダグ・ホイト氏が学ぶべき言語に挙げていたのもあります(他はCとHaskellもあったような)。
やったこと
文法書を何冊か読んで、リポジトリをちらちら覗いています。入門書ではないですが、「Perl Hacks」がメタプログラミングとか、テスト駆動的なトピックも多くて面白かったです。
あとは、「初めてのPerl 」が入門としてはよかったです。
Perlについて思ったこと
機能が意外に多い
Perl6は機能がモダンになっていると聞いていたのですが、Perl5についてはあまり期待しておらずVB6ぐらいの印象を持っていました。Perlで関数型、Perlでオブジェクト指向という文章を見たことがなかったので、シェルスクリプトより少し書きやすい言語なのかなと。
調べていくと関数を値として渡すことも、オブジェクト指向的に扱うこともできました。
分配束縛みたいなこともできますし、タプル、ストリームに近いこともできますし、自分の中でモダンに近いと思えることは大体できました。
細かい差はあるのでコールではないのですが、どうしてこうなっているかという仕組みがわかりやすい分Perlのやりかたは気に入っています。
他の言語との共通点が見つかる
これがPerlを見ていて一番楽しいところです。
PHPは個人的に好印象ではなかったのですが、Perlの文法を見てからとらえ直すと「だから、こういうやり方になったのか」とハッとすることが多いです。変数の宣言もそうですし、スカラーという概念などもここから来ているのかというのを感じる瞬間がとても楽しいです。
Rubyは最初期ほどPerlの影響を受けていないと聞いていますが、それでも正規表現リテラルとか文字列の生成あたりにPerlっぽいシンタックスあったりして、そういうのを見つけた時、にやりとします。
Lispとの共通点で言うとダイナミック変数を使うところとかでしょうか。一時的に設定を上書きするというやりかたをPerlではそこそこ使うので、前に勉強したぞとなりました。
まだ、本格的に勉強していないですが、ソースフィルターをつかえばマクロ的なこともできそうな気はします。Lispほど直感的にはならない気はしますが、ハックとしては楽しそうです。
Perlの後付けオブジェクト指向も、Lispの後付け文法(マクロ)に近い感じがしますね。そういうことを考えるのが楽しい言語です。
読みやすい、書きやすい
Perlというと好きなように書けるので読みづらい、暗黙的なコンテキストに依存するから保守しにくいと聞いていました。個人的にはそういうハックは普通に好きなので、なんだそれ最高だなと。
とはいえ学んでみた感じだと、規則性もしっかりしているので慣れたらそこまで黒魔術ではないんじゃないかという気持ちです。何が起きているのかわからないということはないです。
RubyやJavaScriptでも黒魔術めいたコードをこっそり書く人もいますし、程度の問題ですかね。
Perlは言語学者が設計していて、読みやすく書きやすいようにしているという話があって、慣れてくると自然に読めるという意味でも完成度は高いと感じます。
基本的には大いなる責任が伴ってもいいので、自由に使える言語が好きです。
シェルスクリプトと同時に学べる
シェルスクリプトの延長に近い言語なので、今学ぶと相互的に理解できていいです。
今まで学んだ言語は抽象化されていてあたかも言語の機能みたいになっているところが、Perlでは隠されていなかったりするので、それが見えるのは面白い体験です。
今後とまとめ
文法やこんなモジュールがあるよ!というのを見ているだけで楽しいんですけど、もう少し深堀りしたいなぁという思いがあります。
リポジトリを何個かあたりをつけて研究しつつ、何か作るとすればコンソール系のスクリプトをさらさらと書けるところまで練習するつもりです。
まだまだ未知なことも多いので、一つずつ先人が切り開いた世界を見てみたいです。
あと、昔Perlを書いていたプログラマの人は今Goを書いているという現象を何度か観測しているので、そっちもどこかで手を出すかもなぁと思っています。