「モダンPerl」という言葉の流行
先日,国内有数のPerlハッカーである牧大輔氏が『モダンPerl入門』という書籍を刊行しました。
日本のPerlユーザーのハブサイトを目指しているperl-users.jpでも「モダンなPerl入門」と題して「古来から親しまれているPerl入門とはひと味違う,今風のPerl入門テキスト」を作ろうという動きがあります。
海の向こうでは,Perl 6の言語仕様の策定にたずさわっているクロマティック(chromatic)氏が「Modern Perl Books」というウェブサイトを開設して,「モダンPerl」についての考察を始めました。氏はその名もModern::Perlというモジュール(※1)を公開して「モダンPerl」の啓蒙に努めています。
個人の主義主張に過ぎないのでしょうか?
でも,この「モダンPerl」とはいったい何なのでしょうか。
字面から「今風の」Perlなのだろうということはなんとなく推測できますが,いったいなにをもって「今風」とするのか。そもそも誰にとっての「今風」なのか。
たとえば,クロマティック氏のModern::Perlというモジュール。これは,構文チェックを厳格化するstrictと,各種の警告を有効にするwarnings,そしてPerl 5.10で追加された新しい構文を有効にするfeatureという3つのプラグマを有効にしてくれるものですが,本当に「use Modern::Perl」してあれば「モダンPerl」と呼べるのでしょうか。
『モダンPerl入門』についてもそう。筆者は総じてよく書けている,すばらしい入門書だと思いましたが,「『モダン』と言っても,渋谷の一ベンチャー企業社長の趣味・嗜好を紹介しているだけじゃないか」と言われたら,どうでしょう。反論できるのでしょうか。
仕事の現場で「もっとモダンな書き方をしましょう」と提案して,上司や同僚に「ウチにはウチのやり方があるんだ」と返されたとき,「よその偉い人がそう言っていたんだから従ってくださいよ」と言っては誰も納得してくれません。「モダンPerl」を推奨するなら,もっと具体的・客観的な道しるべが必要でしょう。
連載第1回目となる今回は,この「モダンPerl」の意味や範囲を探ってみることにします。
サポート対象としての「モダンPerl」
さて,「今風の」Perlというくらいですから,まずはPerlの歴史を簡単におさらいしておきましょう。
Perlの公式サイトにあるPerlTimelineというページによると,Perlが誕生したのは1987年のこと。Perl 4が登場したのは1991年(Perl 4歳),いまなお現役で使われているPerl 5が登場したのはPerlが7歳になった1994年のことでした。Perlが13歳になった2000年には,新しいキーワードを追加したPerl 5.6系列とともに,Perl 6の開発が始まり,Perlが15歳になった2002年にはPerl 5.8系列が誕生。Perlがちょうど20歳になった2007年にはPerl 5.10系列が誕生――という具合に,Perlの歴史はまるで人の子の成長記録のようなのですが,人の子が,たどたどしい赤ちゃん言葉から,無邪気な子供言葉,背伸びをした思春期の言葉,落ち着いた成人の言葉へと,だんだん物の言い方を変えていくように,Perlの言葉も,この5年,10年でずいぶん変わってきました。
たとえば,先ほども取り上げたstrictプラグマ。Perl 5とともに登場した(つまり,Perlが7歳のときに生まれた)古いモジュールですから,その有用性についてはそろそろ説明の必要もないと思いますが(ですよね?),人にたとえれば,Perlも小学生になったのだから,いつまでも赤ちゃん言葉を話していないで「こそあど」をきちんと使い分けなさい,という寓意があったかのように感じられます。
Perlの成長とともに進化したという点では国際化モジュールもそうですね。Perl 4時代のjperlやjcode.pl(1992年誕生,Perl 5歳)から,1999年(Perl 12歳)のときに登場したJcodeモジュール,そして2002年(Perl 15歳)のときに登場したEncodeモジュールへと切り替わっていった流れを,国内のことしか目に入らなかった子供時代から,世界が視野に入ってきた青年時代への移り変わりと重ねてみれば,どうでしょう。
2007年(Perl 20歳)に最初のPerl 5.10系列が出たのを受けてPerl 5.8系列を切り捨てようとしたModern::Perlについては,特にPerl 5.10系列のバグフィックス版がまだひとつも出ていない今はやや時期尚早の感がありますが(※2),いわゆる「モダン」なアプリケーションフレームワークのなかにはもうPerl 5.8以降でしか動作しないものも少なくないですし,Perlモジュールをインストールするときの根幹をなすExtUtils::MakeMakerでさえ,2007年末にリリースされた6.37_03以降,ourなどのキーワードをサポートするPerl 5.6系列以降にしかインストールできないようになりました。
Perl 5.6の最初の版が出たのは2000年(Perl 13歳)のことでしたから,要するに21世紀にもなっていまだに20世紀の子供っぽい書き方にしがみついている人はそろそろサポートの対象から外しますよ(サポートが必要な方はこの機会にもう少し「大人」になってくださいね),というのがその意味です。
もちろんここで切り捨てられたPerl 5.5系列や,Perl 4系列でさえ,いまだにユーザは存在していますし,この記事を書いているまさに今もPerl 5.5系列の最新メンテナンス版のリリース準備が進められているというニュースが入ってきましたが(※3),このような「どうがんばってもアップグレードしてくれない層」のために古いPerlでも動くコードを書き続けることは,Perl界全体のことを考えるとマイナスにしかならない(どうせアップグレードしてもらえないなら過去にとらわれずモダンなコードを書いたほうがよい)というのがこの2,3年の趨勢になってきています(※4)。
バグが潜んでいる可能性も高い最新版を追い続ける必要はないですが,経験を積んだいい大人が古いコードにしがみついて既知のバグを再現し続けるのもまたばからしいこと。さまざまな理由から今なお古いPerlを使っている方は,ぜひこの機会に過去数年分のバグフィックスを取り込んだ新しめのPerlへとアップグレードしていただければと思います。
- ※2
Perl 5.8系列は先日公開された5.8.9が最後のリリースとなります。OS付属のPerlの置き換えも進んでいますので,遠からず5.10系列が主流になっていくのは間違いありません。
- ※3
http://www.nntp.perl.org/group/perl.perl5.porters/2009/02/msg144227.html
- ※4

