Perl
Perl（パール）とは、ラリー・ウォールによって開発されたプログラミング言語である。実用性と多様性を重視しており、C言語やsed、awk、シェルスクリプトなど他のプログラミング言語の優れた機能を取り入れている。ウェブ・アプリケーション、システム管理、テキスト処理などのプログラムを書くのに広く用いられている。
言語処理系としてのperlはフリーソフトウェアである。Artistic LicenseおよびGPLのもとで配布されており、誰でもどちらかのライセンスを選択して利用することができる。UNIXやWindowsなど多くのプラットフォーム上で動作する。「#」以降は行末までがコメントである。
変数としてスカラ、配列、ハッシュがある。変数名の前にシジル (sigil) と呼ばれる記号でこれらの変数を区別する。スカラのシジルは「$」、配列は「@」、ハッシュは「%」となっている。
変数は初期化の仕方によって、スコープが異なったものになる。より高速で安全なcodice_2宣言が導入されたPerl 5.0以降、codice_1宣言は非推奨となっている。
下のコードは codice_2 を使って変数を宣言し、同時に初期化する例である。codice_1宣言もキーワードが異なるのみで同様である。
配列およびハッシュの各要素はスカラであり、以下のようにアクセスする。ひとつの要素にアクセスするときは、変数が配列やハッシュであっても「$」を使う。
スカラには数値、文字列などを格納することができる。
条件分岐を行うには「if ～ elsif ～ else」を利用する。
条件分岐後の処理は文がひとつの場合でも必ず中括弧「{～}」で囲まねばならない。
ifは修飾子として後置することもできる。この場合は逆に中括弧で囲むことはできず、ひとつの文しか指定できない。
ifに対してunlessが存在する。ifとは反対に条件が満たされなかった場合に処理が実行される。
繰り返しには codice_7、codice_8、codice_9、codice_10 - codice_9 を利用する。
codice_7 はすべての配列の要素を順番に処理したい場合に利用される。
codice_8は規則性のある仕方で変数を変化させるときに使う。
codice_8 と codice_7 は修飾子として後置することもできる。配列の各要素は順に$_という変数に渡される。
codice_9 は処理を始める前に条件を検査し、条件が満たされる間、処理が繰り返される。
codice_9 には、次の繰り返しに移る前に行いたい処理を codice_18 ブロックにまとめて書くことができる。
codice_19 は処理を行った後に条件を検査し、条件が満たされる間、処理が繰り返される。
codice_20 で繰り返しを抜けることができる。codice_9 文で codice_18 ブロックがある場合には、codice_18 ブロックの内容は実行されない。
codice_24 で次の繰り返しに移行する。codice_24 では、codice_9 文で codice_18 ブロックがある場合には、次の繰り返し処理に移る前に codice_18 ブロックの内容が実行される。codice_8 文の場合、次の繰り返し処理に移る前に codice_8 文の3番目の引数文が実行される。
codice_31 で次の繰り返しに移行する。codice_31 では、codice_9 文で codice_18 ブロックがある場合には、次の繰り返し処理に移る前に codice_18 ブロックの内容は実行されない。codice_7 でも（制御）変数の値は変更されずに最初から同じ処理を繰り返す。codice_8 文の場合、次の繰り返し処理に移る前に codice_8 文の3番目の引数文が実行されない。実のところ codice_31 は繰り返し文専用の制御構造ではなく、ブロック（codice_40 ～ codice_41 で囲われたところ）の内側であればどこでも使え、ブロックの先頭に codice_42 で飛び越すのと全く等価である。
任意の場所に飛び越しを行うには codice_42 を利用する。codice_42 の後ろには飛び越し先ブロックのラベルを書く。codice_42 文は繰り返し文の中やブロックの内側でなくとも、プログラム中のどこにでも記述できる。しかし、繰り返し文の中での飛び越しにはcodice_20、codice_24、ブロックの内側であれば codice_31 を使う方がコードが読みやすくなるので、codice_42が使われることは少ない。
サブルーチンは以下のように定義する。
呼び出しは以下のとおり。
サブルーチンは関数としても機能する。その場合、最後に評価した値ないしcodice_50で指定された値が戻り値となる。
引数は特殊変数codice_51に格納される。
データに直接アクセスするのではなく、データの存在するメモリアドレスをスカラ値として定義するリファレンスを使用することができる。スカラ、配列、ハッシュ、ファイルハンドル、サブルーチンのリファレンスが存在する。
参照元にアクセス、すなわちデリファレンスするには、シジルを変数名の頭につければよい。
ただし、配列・ハッシュおよびサブルーチンへのリファレンスに関しては、その要素にアクセスするのに（あるいはサブルーチンを呼び出すのに）->を使うことができる。
配列・ハッシュについては、配列名・ハッシュ名が定義されておらず、リファレンスからのみアクセスできる無名配列・無名ハッシュを作成することができる。
また、無名サブルーチンを作ることもできる。
参照元のデータタイプを調べるには、codice_52を使う。
参照元がオブジェクトの場合、refはそのオブジェクトが所属するパッケージ名（クラス名）を返す。
モジュールを利用するにはuseを使用する。
モジュールの読み込みと共に関数をインポートしたい場合は、モジュール名に続いて、関数名を並べるのが一般的である。
評価コンテキスト、すなわち、構文上何が(リスト、数値、文字列、リファレンス、あるいは何もないのかが)要求されているかの違いにより評価値が変化する。
リストがスカラコンテキストで評価されるとリストの最後の要素に評価され、配列がスカラコンテキストで評価されると配列の長さに評価される。
意味が大きく変わる表現も存在する。
ブロックを呼び出したコンテキストを codice_53 で判別することができる。したがって、コンテキストによって返り値を切り替えるような関数をユーザーが定義することもできる。
例外を発生させるにはdie関数を使う。例外が発生するとプログラムはメッセージを出力して終了する。
例外をキャッチするには「eval { };」を使用する。例外が発生した場合は特殊変数「$@」にメッセージが代入される。「$@」の値を調べることで例外が発生した場合の処理を記述できる。
Perlにおけるパッケージとは、一般的に名前空間と呼ばれる機能のことである。パッケージを宣言するには「package」を使う。
パッケージ内で宣言されたパッケージ変数とサブルーチンはパッケージに属するものとなる。パッケージ変数を宣言するには「our」を使う。パッケージ変数には大文字を利用するのが一般的である。
上記において、Fooパッケージのパッケージ変数$NUMとBarパッケージのパッケージ変数$NUMはまったく別の変数である。またFooパッケージのsumとBarパッケージのsumはまったく別のサブルーチンである。パッケージ変数やサブルーチンはパッケージごとに定義することができる。
自パッケージ内であれば、パッケージ名の指定を行わずに、パッケージ変数やサブルーチンを参照することができる。
他のパッケージから参照するには、完全修飾を行う必要がある。mainはデフォルトのパッケージをあらわす。
Perlでは、上記のリファレンスとパッケージを組み合わせることにより、クラスベースのオブジェクト指向を実現している。
オブジェクトを使うときは以下のようにする。
なぜこれが動くのかというと実は、Perlはこれを以下のように解釈している。
Perlにおいて、クラスはただのパッケージであり、オブジェクトはただのblessされたリファレンスであり、そしてメソッドは第一引数にオブジェクトをとるただのサブルーチンである。これはPerl 4との互換性を考慮してこのような「後付け」の設計となったのだが、驚くべき柔軟性を示す。これだけで継承も委譲も出来てしまうのだ。最初からオブジェクト指向のもとに設計された言語から見ると見た目は変であるが、それらの言語に勝るとも劣らないオブジェクト機能をPerlは持っている。
ドキュメンテーションはPODを用いて記述する。
コマンドラインからワンライナーと呼ばれる機能を使って、Perlを実行することができる。
以下の2行をプログラムの先頭に記述することが強く推奨されている。
strict は潜在的な問題をコンパイル時に調べるためのものであり、warnings は警告の出力を有効にするためものである。perl インタプリタを起動するときのコマンドラインオプションの -w とは似ているが同じではない。warnings の方がより細かいので use warnings を使って -w オプションは省略すればよい。
また、use で 5.11.0 以降のバージョン番号を指定した場合にはデフォルトで use strict が有効になるため、書くことが推奨されるのは use warnings のみとなる。
Perl 5.10.0以降では改行を自動的に出力するsayが使えるようになった。
シェルからはcodice_54オプションの代わりにcodice_55を使用すれば、追加機能を利用できる。
PODによる記法を用いると複数行コメントを書くことができる。(あまり利用されない)Perlプログラムには、モジュールによって機能を付加することができる。たとえば、他のプログラムやネットワークとの通信、各種ファイル形式の取り扱い、数学的な計算など、数多くのモジュールが存在する。PerlにはCPANというモジュールを体系的に管理するインターネット上のシステムがある。インターネットに接続しているならば、CPANにアクセスして、モジュールをインストールすることが可能である。
Perlには標準で利用できるモジュールが数多く存在する。
Perlは当初、新約聖書のマタイによる福音書13章46節の「高価な真珠」にちなんで真珠を意味する「pearl」と名付けられた。ラリー・ウォールは肯定的な意味を持つ短い名前を選びたいと考えていて、彼によれば3文字および4文字の単語を辞書から探したが良いのが見つからなかったということである。また、彼は妻のグロリアにちなんで名前を付けることも考えたが、家族の会話でまぎらわしいために却下となった。
Perlの正式なリリースの前に、すでに「pearl」という名前のプログラミング言語が存在することに気づき、綴りを変更して「Perl」とした。このようにPerlは略語ではなく、もともと意味はないが、あとからいくつかの意味が考えられている。開発者ラリー自身によると、「」（実用的なデータ取得レポート作成言語）という意味を持ち、同時に 「」（病的折衷主義のガラクタ出力装置）という少し皮肉な意味も込められている。
Perlという名称の記述においては、若干の注意が必要である。プログラミング言語としてのPerlを示すときは「Perl」というように、頭文字を大文字にして固有名詞であることをはっきりさせる。この「Perl」という表記では処理系のことは含まれない。Perl 5の現在開発されている唯一の処理系は「perl」という、すべて小文字で記述される名前の処理系である。一般に「perlだけがPerlを解釈することができる」という表現がなされる。「PERL」のようにすべてを大文字にするのは誤りである。
このようにPerl 5現在において、Perlとは言語の名前であると同時に唯一の処理系の名前でもある。この処理系はC言語で書かれている。スクリプトは実行前に仮想機械向けにコンパイルされ、コンパイルされたバイトコードが実行される（ランタイムコンパイル）。そのため、厳密にはインタプリタとは異なる。
Pythonのように一旦生成したバイトコードを保存して再利用することは少ないが、これは現在のPerlのランタイムコンパイルが高速で、バイトコードから実行するメリットがあまりないことが理由の一つである。コンパイル済みコードの再利用としてはむしろmod_perlのような形式が好まれている。
PAR (Perl Archive Toolkit) というPerlスクリプトを実行環境ごとアーカイブし、単一のファイルにまとめるためのツールキットも存在する。JARのPerl版と考えてよい。実行可能ファイルを作ることもできるため、アプリケーションの配布に適する。しかしその場合はPerl実行環境をまるごと含むため、ファイルサイズが大きくなる傾向にある。
Perlの姉妹言語としてPerl6が存在する。Perl6はParrotというバーチャルマシンの上で動作する。現在、ParrotCodeへのコンパイルを行うRakudo Starという処理系やHaskellで書かれたPugsという処理系などの複数の実装が公開されている。なおPerl6はPerlと互換性を持たない。
Web アプリケーションや管理ツールの多くが Perl で書かれている。