Perlによるプログラミングに関する世界観(戯言)です。Perlも参照のこと。
Perlの特徴として、Perlの作者のラリー・ウォールの遊び心がいっぱいである、ということが言えます。
各所に面白くするための工夫が見られて、省略など多くの「多様なやり方」があります。
UNIXとも親和性が高く、処理速度もスクリプト言語の中では高速なので、Perlの愛好家は今でもたくさんいます。
最近はPythonやRubyなど新しい言語がどんどん増えていますが、彼らは「多様性よりも自然さ」を好み、「自然でない記述は書きづらくする」といったことを行っています。それが悪いわけでは全くありませんが、Perlの遊び心がPythonやRubyでは失われているように感じます。
Perlは、UNIXでは古くから、あるプログラムとあるプログラムの間をノリのようにくっつけて取り持つ「グルー言語」として使われます。
Perlは正規表現やファイル処理などを簡単に記述することができ、省略構文やデフォルト変数などを上手く使うことで、強力なテキスト処理・ファイル処理を行うことができます。
こうした理由のため、grep, sed, awkなどでは簡単にできないような、決まりきった定型処理を巨大なテキストや膨大なファイルにバッチ処理のように行う時、シェルスクリプトなどの代わりにPerlを使って柔軟な自動処理を実現できます。
また、Perlの正規表現は「ある決まりをもった構造的なデータの処理」を得意としており、そのためログファイル、メールヘッダ、設定ファイルなどを処理・加工することに適しています。
要するに、「UNIXアドミニストレータが楽をするための言語」です。
また、Perlは、Webサーバ上で動的なHTMLを自動生成するCGIと呼ばれる仕組みを開拓した存在です。CGIは昔はPerlで書かれたものが一般的でした。今ではHTMLの中にスクリプトを埋め込めるPHPが登場し、プロセス単位でプログラムを実行するPerl/CGIよりもサーバーの中でスレッドを作成するPHPやJavaサーブレットが登場したこともあり、Perlで新しく作られることは少なくなっていますが、インターネット上ではPerlで作られたフリーの配布スクリプトなどが今でも配布されています。こうしたPerl/CGIで書かれたCGIでWebプログラマへの道を志した人も多いと思います。
しかしながら、Perlには欠点があります。それは、記号が多く、記述の自由度が高く、省略構文や他の言語にはない仕様が多いため、難読化されたような「他人には絶対に分からないような分かりづらい(そして醜い)コード」になることが多いのです。
また、Perlのオブジェクト指向は後から追加されたものであり、PythonやRubyのオブジェクト指向に比べてエレガントでありません。
また、今やWebサービスはWebフレームワークで開発することが一般的になっており、LaravelやRuby on RailsやDjangoなどが一般的です。特に、人工知能やデータサイエンスのためのライブラリが豊富なPythonを、Djangoと組み合わせてWebサービスを構築することが最近は増えています。クライアントサイドで使われていたJavaScriptを、Node.jsなどを用いてサーバーサイドで使うことも増えています。JavaScriptには欠点もありますが(数値型の種類が少なくクラスベースのオブジェクト指向でないなど)、TypeScriptなどを使うことで補うことができます。
そのような理由で、Perlは既に旧来の言語になろうとしています。
しかしながら、Perlには「言語仕様として面白い要素」がたくさんあります。また、昔はPythonではなくPerlがプログラミング初学者にとっておすすめの言語でした。そのため、プログラマを目指すのであれば、一度学んでおいて損はない言語です。古くからの言語であるため、書籍も多く、ラクダ本のような決定的バイブルもあり、入門的な書籍もたくさんあるため、初心者にとっては学びやすいでしょう。
Perlを「もう終わった言語」だとする人は多いですが、Perlは今でも、テキストやファイル処理を手軽にしたい場合に便利です。
Perlは、昔からテキストやファイルを簡単に編集するための手軽な言語として愛用されてきました。
確かに、昔はCGI向けに猛威を振るっていて、掲示板やチャットはPerl/CGIで作っていましたが、今ではPHP, Python, Rubyのようなもっと新しい言語ができたので、Web向けであればPerlを使う理由はありません。
ですが、テキスト処理やファイル処理を手軽にしたい場合には、Perlは今でも使われている現役の言語のひとつです。
なので、プログラミング初心者がPerlを学ぶこと自体は間違っていません。どんなに古いと言われても、時代遅れではありません。Perlは「プログラミングをする楽しさ」がある言語です。この特徴はRubyなどに引き継がれていますが、元祖はPerlであると言えます。
sedやawkライクなスクリプト言語として、簡単な処理スクリプトに良く使われる。
正規表現を手軽に使うために良く使われる。
サーバーサイドのPerl/CGIによるブラウザアプリケーションや、ネットで配布されている掲示板などのスクリプトの実行環境として良く使われる。
Perlでは、グローバル変数を多用することで、オブジェクト指向を行わなくても、容易にデータの共有ができる。
これは、RubyやJavaScriptにおける、クロージャと良く似ている。僕は、これを「グローバル変数による準クロージャ機能」と呼んで良いと思う。
Perlでは、グローバルスコープに変数や関数の宣言が置かれるため、どの関数からも同じ変数を参照することができて、簡単かつ、プログラミング初心者が自分のコードを書く上で、分かりやすい。
だが、これは小規模なスクリプト言語だからなせる業である。もっと大規模なプログラミングを行う上では、どの関数群がどの変数の宣言を共有するのか、きちんと分けて考えないといけない。そのためには、JavaやC++のような、名前空間やパッケージ、そしてオブジェクト指向のクラスとそのメンバとインスタンスの考え方の導入が必要である。
これは、CとC++の関係にも言える。Cでは、さまざまな関数で同じ変数を共有するためには、グローバル変数を使うか、あるいは構造体のポインタを使う。プロトタイプ宣言はヘッダファイルに書かれている。だが、この方法では、開発者やその保守をする人が、プログラミングの実装の詳細について詳しく分かっていなければならない。JavaやC++のオブジェクト指向を使えば、それを隠蔽し、カプセル化することができる。
Perlはプログラミング初心者に有用である。Perl作者のラリー・ウォールが書いた「プログラミングPerl」というラクダ本(オライリーの表紙がラクダなのでそのように呼ばれている)は、今でもプログラミング言語のバイブル的存在である。
新しいPerl。Perlの作者ラリー・ウォールが15年の歳月を経てリリースした伝説の新バージョン。
ラリー・ウォールは、Perl 6と呼ばれるPerlの後継バージョンを15年考えて開発した。最近リリースはされたが、本質的なところはPerl 5の雰囲気が残っている。Parrotと呼ばれる「軽量プログラミング言語のための共通仮想マシン」も作られていたが、それはどうなったのか定かではない。だが、Perl陣営は今でも頑張っている、ということは言えるだろう。
Perl 6の正式名称はRakuに決定した。これにより、Perl 6がPerl 5の後継バージョンではなく別の言語であることが明確になった。名称の由来は日本語の「楽」からである。僕の憶測だが、おそらく「ラクダ」からつけたかったのではないかと思う。ラクダは楽だ。
僕は、UNIXとPerlの組み合わせがなぜ優れていたのか、それほど多くのファンを作り出したのか、ということが分かります。
それは、「共有と多様性の原則」です。
この世界においては、「共有」と「多様性」ということは、正反対の考え方に見えて、実際は同じ理想を信じています。
共有とは、システムの一番大切な部分を、ひとつ正しいものを作った上で、常にそれを共有するということです。
そして、多様性とは、そのシステムをどのように使うこともできて、それぞれが異なる使い方で、異なるシステムを作ることができる、ということです。
そして、共有は堅牢さを、手軽さは多様性を作り出します。
システムのもっとも大切な部分をみんなで共有することで、みんなで多くの目でそのシステムが正しく実装されているかを確認できます。
そして、手軽に使えるシステム、単純に使えるシステムは、それぞれの人間がそれぞれ違った方法で使い、それによってシステムを構築するために、多様性を生み出します。
そして、この「共有による堅牢さ」が、すなわちUNIXカーネルであり、「手軽さによる多様性」が、すなわちPerlだったのです。
そのように、UNIXとPerlは、まさにベストマッチングなOSと言語処理系だったのです。
これこそが、UNIXとPerlが、CGIやサーバーの開発で、多くのファンを勝ち得た理由だと思います。
UNIXのカーネルが、フリーかつオープンソースであったことで、どのようなシステムに使われても安定して動く「堅牢さ」を得ることができました。すべて、「ソースコードの公開と共有」が為した業です。
同時に、Perlがあまりに手軽かつ単純で、多様性のあるプログラムの記述方法を許したことで、多くの人が自分なりにPerlを使い、自分なりのWebサイトやWebアプリケーションを作り出しました。
そう、UNIXとPerlがCGIとWebサーバーの世界で猛威を振るっていたのは、偶然ではなく、きちんとした必然的な原因があったのだと、僕は思います。
2023.04.26