Perl

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

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

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

## Hello world


```perl
print "Hello, world!\n" ;
```


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

### 標準モジュール

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

* base - 派生元モジュールを指定するのに用いる。
* Benchmark - ベンチマーク
* Carp - 呼び出し元の観点で例外を発生
* Cwd - カレントディレクトリのパスを取得
* Data::Dumper - 変数の内容を出力
* Digest::MD5 - MD5値
* Digest::SHA - SHA-1/224/256/384/512  
* Encode - 文字列のエンコード・デコード
* Exporter - 関数のエクスポート
* File::Basename - ファイルのベース名とディレクトリ名の取得
* File::Copy - ファイルの移動とコピー
* File::Path - 複数階層のディレクトリの作成と削除
* File::Spec - ファイル名に対する移植性のある処理
* File::Temp - 一時ファイルの生成
* FindBin - スクリプトが存在するディレクトリのパスの取得
* Getopt::Long - コマンドライン引数の処理
* IO::Socket::INET - ソケット
* lib - モジュールの検索パスを追加
* List::Util - 配列に対する処理
* Net::FTP - FTPクライアント
* Scalar::Util - スカラ値のユーティリティ
* Storable - データの直列化
* Sys::Hostname - ホスト名の取得
* Time::Piece - 日付・時刻の扱い
* utf8 - utf8プラグマ

### 代表的なCPANモジュール
; テキスト処理
:* Text::CSV - CSVファイルの解析
:* Text::Diff - diffコマンド
:* Template Toolkit - テンプレートシステム

; データベース
:* DBI - 汎用データベースインタフェース
:
; Webアプリケーション
:* CGI - CGIプログラミング
:* Plack - PSGIのリファレンス実装
:* Mojolicious - Webフレームワーク
:* Catalyst - Webアプリケーションフレームワーク
:
; Webアクセス
:* LWP::UserAgent - WWWクライアント
:
; データ記述言語の処理
:* XML::Simple - XMLをPerlのデータ構造に変換
:* XML::LibXML - XMLのサポート
:* JSON - JSONのサポート
:* YAML - YAMLのサポート

## 歴史

## エピソード
ラリー・ウォールは敬虔なクリスチャンであったため、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の姉妹言語としてRaku (旧 Perl 6) が存在する。RakuはParrotという仮想マシンの上で動作する。現在、ParrotCodeへのコンパイルを行うRakudo Starという処理系やHaskellで書かれたPugsという処理系などの複数の実装が公開されている。なおRakuはPerlと互換性を持たない。

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

### Webアプリケーション
*Movable Type
*TWiki
*Bugzilla
*cPanel

### Webサービス
* DuckDuckGo

### 管理ツール
*git
*openssl
*autoconf
*automake
*SpamAssassin
*VmwareTools
*MySQL innotop

## 脚注



## 参考文献
* ラリー・ウォール、ジョン・オーワント、トム・クリスチャンセン著、近藤嘉雪訳『プログラミング Perl』VOLUME 1 (ISBN 4-87311-096-3), 2 (ISBN 4-87311-097-1), オライリー・ジャパン、2002年

## 関連項目

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

## 外部リンク

* 
* Perl programming documentation - Perlの公式ドキュメント
* perldoc.jp - Perlの公式ドキュメントの日本語訳
* CPAN - Perlのモジュールの配布を行うサイト
* Perl.com - オライリーによるPerlのウェブサイト
* ActivePerl - ActiveState社のPerlディストリビューション。Win32版はWindows環境で最も利用される。
* Chocolate Perl - Perlのディストリビューションのひとつ
* Strawberry Perl - Perlのディストリビューションのひとつ
* PSGI/Plack - WSGIのPerlによる実装
* Japan Perl Association - YAPC::Asiaを主催する一般社団法人