Perl

Perlとは、ラリー・ウォールによって開発されたプログラミング言語である。実用性と多様性を重視しており、C言語やsed、awk、シェルスクリプトなど他のプログラミング言語の優れた機能を取り入れている。ウェブ・アプリケーション、システム管理、テキスト処理など、さまざまなプログラムの開発に広く利用されている。

言語処理系としてのperlはフリーソフトウェアである。Artistic LicenseおよびGPLのもとで配布されており、誰でもどちらかのライセンスを選択して利用することができる。UNIX、Windows、macOSやLinuxのようなUNIX互換OSなど多くのプラットフォーム上で動作する。

1. 特徴
-----

強力な文字列処理の仕組みを備えており、正規表現を利用できる。
連想配列をサポート。
多次元データ構造が利用可能。
自由度の高い文法。簡潔にプログラムを記述できる。
後方互換性は高い。
数多くのオペレーティングシステムで利用可能である。
インタプリタであり、コードを利用者がコンパイルする仕組みはない。
スクリプト言語の中では高い処理速度を持つ。
Unicode使用を支援する仕組みがある。
モジュールによる拡張が可能であり、有志によって開発された豊富なモジュールを利用できる。
オブジェクト指向を支援する仕組みがある。
リファレンスカウント方式によるガーベッジコレクションの仕組みがある。
例外処理を利用できる。
クロージャを利用できる。
リフレクションを利用できる。

2. Hello world
--------------

say 'Hello, world!' ;

3. モジュール
--------

Perlプログラムには、モジュールによって機能を付加することができる。たとえば、他のプログラムやネットワークとの通信、各種ファイル形式の取り扱い、数学的な計算など、数多くのモジュールが存在する。PerlにはCPANというモジュールを体系的に管理するインターネット上のシステムがある。インターネットに接続していれば、CPANにアクセスして、モジュールをインストールすることが可能である。

3.1. 標準モジュール
------------

Perlには標準で利用できるモジュールが数多く存在する。一部を以下に挙げる。

[1] - 派生元モジュールを指定するのに用いる。
[2] - ベンチマーク
[3] - 呼び出し元の観点で例外を発生
[4] - カレントディレクトリのパスを取得
[5] - 変数の内容を出力
[6] - MD5値
[7] - SHA-1/224/256/384/512
[8] - 文字列のエンコード・デコード
[9] - 関数のエクスポート
[10] - ファイルのベース名とディレクトリ名の取得
[11] - ファイルの移動とコピー
[12] - 複数階層のディレクトリの作成と削除
[13] - ファイル名に対する移植性のある処理
[14] - 一時ファイルの生成
[15] - スクリプトが存在するディレクトリのパスの取得
[16] - コマンドライン引数の処理
[17] - ソケット
[18] - モジュールの検索パスを追加
[19] - 配列に対する処理
[20] - FTPクライアント
[21] - スカラ値のユーティリティ
[22] - データの直列化
[23] - ホスト名の取得
[24] - 日付・時刻の扱い
[25] - utf8プラグマ

3.2. 代表的なCPANモジュール
------------------

テキスト処理
[26] - CSVファイルの解析
[27] - diffコマンド
[28] - テンプレートシステム データベース
[29] - 汎用データベースインタフェース Webアプリケーション
[30] - CGIプログラミング
[31] - PSGIのリファレンス実装
[32] - Webフレームワーク
[33] - Webアプリケーションフレームワーク Webアクセス
[34] - WWWクライアント データ記述言語の処理
[35] - XMLをPerlのデータ構造に変換
[36] - XMLのサポート
[37] - JSONのサポート
[38] - YAMLのサポート

4. 歴史
-----



5. エピソード
--------

ラリー・ウォールは敬虔なクリスチャンであったため、Perlは当初、新約聖書のマタイによる福音書13章46節の「高価な真珠」にちなんで、真珠を意味する「pearl」と名付けられた。ラリーは肯定的な意味を持つ短い名前を選びたいと考えていて、彼によれば3文字および4文字の単語を辞書から探したが良いのが見つからなかったということである。また、彼は妻のグロリアにちなんで名前を付けることも考えたが、家族の会話でまぎらわしいために却下となった。

Perlの正式なリリースの前に、ラリーはすでに「PEARL」という名前のプログラミング言語が存在することに気づき、綴りを変更して「Perl」とした。このようにPerlという名前は何らかの略語ではないが、あとからいくつかのバクロニムが考えられている。開発者ラリー自身によると、「en」という意味を持ち、同時に 「en」という少し皮肉な意味も込められている。

6. 処理系
------

Perlという名称の記述においては、若干の注意が必要である。プログラミング言語としてのPerlを示すときは「Perl」というように、頭文字を大文字にして固有名詞であることをはっきりさせる。この「Perl」という表記では処理系のことは含まれない。Perl 5の現在開発されている唯一の処理系は「perl」という、すべて小文字で記述される名前の処理系である。一般に「perlだけがPerlを解釈することができる」という表現がなされる。「PERL」のようにすべてを大文字にするのは誤りである。

このようにPerl 5現在において、Perlとは言語の名前であると同時に唯一の処理系の名前でもある。この処理系はC言語で書かれている。スクリプトは実行前に仮想機械向けにコンパイルされ、コンパイルされたバイトコードが実行される。そのため、厳密にはインタプリタとは異なる。

Pythonのように一旦生成したバイトコードを保存して再利用することは少ないが、これは現在のPerlのランタイムコンパイルが高速で、バイトコードから実行するメリットがあまりないことが理由の一つである。コンパイル済みコードの再利用としてはむしろ[39]のような形式が好まれている。

[40]  というPerlスクリプトを実行環境ごとアーカイブし、単一のファイルにまとめるためのツールキットも存在する。JARのPerl版と考えてよい。実行可能ファイルを作ることもできるため、アプリケーションの配布に適する。しかしその場合はPerl実行環境をまるごと含むため、ファイルサイズが大きくなる傾向にある。

Perlの姉妹言語としてRaku  が存在する。RakuはParrotというバーチャルマシンの上で動作する。現在、ParrotCodeへのコンパイルを行うRakudo Starという処理系やHaskellで書かれたPugsという処理系などの複数の実装が公開されている。なおRakuはPerlと互換性を持たない。

7. Perlが利用されているアプリケーション
-----------------------

Perlが利用されている代表的なWeb アプリケーションや管理ツール。

7.1. Webアプリケーション
----------------

Movable Type
TWiki
Bugzilla
cPanel

7.2. Webサービス
------------

DuckDuckGo

7.3. 管理ツール
----------

git
openssl
autoconf
automake
SpamAssassin
VmwareTools
MySQL innotop

8. 脚注
-----

9. 参考文献
-------

ラリー・ウォール、ジョン・オーワント、トム・クリスチャンセン著、近藤嘉雪訳『プログラミング [41]』VOLUME 1 , 2 , オライリー・ジャパン、2002年

10. 関連項目
--------

ラリー・ウォール
Artistic License
グルー言語
スクリプト言語
軽量プログラミング言語

11. 外部リンク
---------

[42] - Perlの公式ドキュメント
[43] - Perlの公式ドキュメントの日本語訳
[44] - Perlのモジュールの配布を行うサイト
[45] - オライリーによるPerlのウェブサイト
[46] - ActiveState社のPerlディストリビューション。Win32版はWindows環境で最も利用される。
[47] - Perlのディストリビューションのひとつ
[48] - Perlのディストリビューションのひとつ
[49] - WSGIのPerlによる実装
[50] - YAPC::Asiaを主催する一般社団法人