検索この項目では、Perlとしての最新バージョンであるバージョン5系までのPerlについて説明しています。当初Perlの次期メジャーバージョンとして設計が始められたプログラミング言語については「Perl6」をご覧ください。■テンプレートPerl(パール)とは、ラリー・ウォールによって開発されたプログラミング言語である。実用性と多様性を重視しており、C言語やsed、awk、シェルスクリプトなど他のプログラミング言語の優れた機能を取り入れている。ウェブ・アプリケーション、システム管理、テキスト処理などのプログラムを書くのに広く用いられている。言語処理系としてのperlはフリーソフトウェアである。LicenseおよびGPLのもとで配布されており、誰でもどちらかのライセンスを選択して利用することができる。UNIXやWindowsなど多くのプラットフォーム上で動作する。world!\n";文法[編集]コメント[編集]「#」以降は行末までがコメントである。変数[編集]変数としてスカラ、配列、ハッシュがある。呼ばれる記号でこれらの変数を区別する。スカラのシジルは「$」、配列は「@」、ハッシュは「%」となっている。変数は初期化の仕方によって、スコープが異なったものになる。5.0以降、local宣言は非推奨となっている[1]。使って変数を宣言し、同時に初期化する例である。local宣言もキーワードが異なるのみで同様である。これらの変数は開き括弧「{」から閉じ括弧「}」までの間で有効。}配列およびハッシュの各要素はスカラであり、以下のようにアクセスする。ひとつの要素にアクセスするときは、変数が配列やハッシュであっても「$」を使う。80スカラには数値、文字列などを格納することができる。else」を利用する。~}条件分岐後の処理は文がひとつの場合でも必ず中括弧「{~}」で囲まねばならない。ifは修飾子として後置することもできる。この場合は逆に中括弧で囲むことはできず、ひとつの文しか指定できない。;ifに対してunlessが存在する。ifとは反対に条件が満たされなかった場合に処理が実行される。すべての配列の要素を順番に処理したい場合に利用される。処理}forは規則性のある仕方で変数を変化させるときに使う。修飾子として後置することもできる。配列の各要素は順に$_という変数に渡される。処理を始める前に条件を検査し、条件が満たされる間、処理が繰り返される。ブロックにまとめて書くことができる。処理を行った後に条件を検査し、条件が満たされる間、処理が繰り返される。繰り返しを抜けることができる。ブロックの内容は実行されない。ない値を見つけたら、その時点で繰り返しをやめる。次の繰り返しに移行する。ブロックの内容は実行が実行される。文の3番目の引数文が実行される。ない値を見つけたら、次の繰り返し処理に移る。次の繰り返しに移行する。ブロックの内容は実行されない。(制御)変数の値は変更されずに最初から同じ処理を繰り返す。文の3番目の引数文が実行されない。飛び越すのと全く等価である。後ろには飛び越し先ブロックのラベルを書く。文は繰り返し文の中やブロックの内側でなくとも、プログラム中のどこにでも記述できる。使う方がコードが読みやすくなるので、gotoが使われることは少ない。;}サブルーチン[編集]サブルーチンは以下のように定義する。world!\n";}呼び出しは以下のとおり。hello();hello;&amp;hello();サブルーチンは関数としても機能する。その場合、最後に評価した値ないしreturnで指定された値が戻り値となる。引数は特殊変数@_に格納される。書けるリファレンス[編集]データに直接アクセスするのではなく、データの存在するメモリアドレスをスカラ値として定義するリファレンスを使用することができる。スカラ、配列、ハッシュ、ファイルハンドル、サブルーチンのリファレンスが存在する。$fhがファイルハンドルへのリファレンス参照元にアクセス、すなわちデリファレンスするには、シジルを変数名の頭につければよい。戻り値が入るただし、配列・ハッシュおよびサブルーチンへのリファレンスに関しては、その要素にアクセスするのに(あるいはサブルーチンを呼び出すのに)->を使うことができる。3);配列・ハッシュについては、配列名・ハッシュ名が定義されておらず、リファレンスからのみアクセスできる無名配列・無名ハッシュを作成することができる。無名ハッシュまた、無名サブルーチンを作ることもできる。書けるが、読みにくいためあまり使われない参照元のデータタイプを調べるには、refを使う。'HASH'参照元がオブジェクトの場合、refはそのオブジェクトが所属するパッケージ名(クラス名)を返す。'Foo::Bar'モジュールの利用[編集]モジュールを利用するにはuseを使用する。Net::FTP;モジュールの読み込みと共に関数をインポートしたい場合は、モジュール名に続いて、関数名を並べるのが一般的である。'fileparse';評価コンテキスト[編集]評価コンテキスト、すなわち、構文上何が(リスト、数値、文字列、リファレンス、あるいは何もないのかが)要求されているかの違いにより評価値が変化する。リストがスカラコンテキストで評価されるとリストの最後の要素に評価され、配列がスカラコンテキストで評価されると配列の長さに評価される。意味が大きく変わる表現も存在する。判別することができる。したがって、コンテキストによって返り値を切り替えるような関数をユーザーが定義することもできる。例外処理[編集]例外を発生させるにはdie関数を使う。例外が発生するとプログラムはメッセージを出力して終了する。"例外が発生しました。例外が発生した場合は特殊変数「$@」にメッセージが代入される。「$@」の値を調べることで例外が発生した場合の処理を記述できる。例外が発生した場合の処理}パッケージ[編集]Perlにおけるパッケージとは、一般的に名前空間と呼ばれる機能のことである。パッケージを宣言するには「package」を使う。Foo;パッケージ内で宣言されたパッケージ変数とサブルーチンはパッケージに属するものとなる。パッケージ変数を宣言するには「our」を使う。パッケージ変数には大文字を利用するのが一般的である。...}上記において、Fooパッケージのパッケージ変数$NUMとBarパッケージのパッケージ変数$NUMはまったく別の変数である。FooパッケージのsumとBarパッケージのsumはまったく別のサブルーチンである。パッケージ変数やサブルーチンはパッケージごとに定義することができる。自パッケージ内であれば、パッケージ名の指定を行わずに、パッケージ変数やサブルーチンを参照することができる。sum();他のパッケージから参照するには、完全修飾を行う必要がある。mainはデフォルトのパッケージをあらわす。Foo::sum();オブジェクト[編集]Perlでは、上記のリファレンスとパッケージを組み合わせることにより、クラスベースのオブジェクト指向を実現している。$self-&gt;{meth};}オブジェクトを使うときは以下のようにする。'od';なぜこれが動くのかというと実は、Perlはこれを以下のように解釈している。Class::meth($obj);Perlにおいて、クラスはただのパッケージであり、オブジェクトはただのblessされたリファレンスであり、そしてメソッドは第一引数にオブジェクトをとるただのサブルーチンである。4との互換性を考慮してこのような「後付け」の設計となったのだが、驚くべき柔軟性を示す。これだけで継承も委譲も出来てしまうのだ。最初からオブジェクト指向のもとに設計された言語から見ると見た目は変であるが、それらの言語にまさるとも劣らないオブジェクト機能をPerlは持っている。ドキュメンテーション[編集]ドキュメンテーションはPODを用いて記述する。...=cutワンライナー[編集]コマンドラインからワンライナーと呼ばれる機能を使って、Perlを実行することができる。world!"'推奨されている記述[編集]以下の2行をプログラムの先頭に記述することが強く推奨されている。警告の出力を有効にするためものである。似ているが同じではない。オプションは省略すればよい。5.10.0以降では改行を自動的に出力するsayが使えるようになった。world!";シェルからは-eオプションの代わりに-Eを使用すれば、追加機能を利用できる。world!"'複数行の注釈[編集]PODによる記法を用いると複数行コメントを書くことができる。commentここはコメントです。commentその他の特徴[編集]スレッドPerlのスレッドはデータが丸ごとコピーされるという点で概念的にUNIXやLinuxのforkに近い。iThreads(インタープリタスレッド)と呼ばれており、他のシステムにおけるどのスレッドとも実装は異なる。シグナルと同時に利用することで問題があるとも言われている。Windows版にてforkのような実装を行うためのコードだったものから、発展している[3]。多くのLinuxディストリビューションではiThreadsをオンにして配布しているが、安全性重視をうたっているFreeBSDやOpenBSDの標準ディストリビューションやOpenSolarisでは、iThreadsをオフにしている。PerlIOレイヤ入出力操作に手を加えることができる。各レイヤはC言語で実装できるため高速である。モジュール[編集]Perlプログラムには、モジュールによって機能を付加することができる。他のプログラムやネットワークとの通信、各種ファイル形式の取り扱い、数学的な計算など、数多くのモジュールが存在する。PerlにはCPANというモジュールを体系的に管理するインターネット上のシステムがある。インターネットに接続しているならば、CPANにアクセスして、モジュールをインストールすることが可能である。標準モジュール[編集]Perlには標準で利用できるモジュールが数多く存在する。機のためのコンフィギュレーション管理制御システムのレポート作成ツールとして誕生した。風にアレンジし、導入した。3.01989年10月18日バイナリデータを処理できるようになった。発売されたのに合わせて公開された。5.01994年10月17日リファレンスおよびオブジェクト指向に対応。useが導入され追加モジュールの取扱いが大幅に強化された。正規表現演算子の追加がなされた。含む幅広いオペレーティングシステムに移植された。サポートする最後のバージョンということである。したがって、日本語情報処理において今なお使われている。5.6.02000年5月22日our文やウィークリファレンス、warningsプラグマの導入など、言語コアが大きく拡張された。サポートを開始した最初のバージョン。バージョン番号の構造を変更。サブバージョン(5.6.0の6に相当)が偶数のものが安定版、奇数のものが開発版を意味する。5.8.02002年7月18日5.8系列の最新版は5.8.9(2008年12月14日)。様々な文字エンコーディングに正式に対応した。スレッドやPerlIOレイヤが導入された。公開からちょうど20年目にあたる。言語拡張が導入された。プラグマで制御できるようになった。修飾子などが導入された。日付と時刻に関するコアモジュールが2038年問題に対応した。IPv6サポートの改善。配列やハッシュを受け取る関数が、リファレンスを受け取ることができるようになった。値を破壊せずに戻り値として返す正規表現オプション「r」が追加。バージョン番号」文の動作が変更された。新たに実装された機能を無効化する」という動作になった。「__SUB__」は現在実行中のサブルーチンに対する参照を返す。「evalbytes」を有効にすると、引数をバイト列として評価する「evalbytes」関数が利用できる。左辺値もしくは潜在的に左辺値とみられるコンテキストで2つもしくは3つの引数付きで呼び出された場合、第一引数を変更する特殊な左辺値スカラを返す。デバッガ、CORE名前空間、XSインターフェイスなどでさまざまな機能強化が加わっている。加わったスマートマッチ演算子、レキシカルな「$_」がそのカテゴリに変更された。いったハッシュを利用する関数が返すキー/値の並び順が実行毎に異なるようになった。対応、新しいDTraceプローブの追加、実験的機能としてレキシカルサブルーチンの追加などが行われた。「\N{...}」表現の扱いがいくつか変わっているほか、垂直タブがホワイトスペースとして扱われなくなっている点など、文字の扱いについていくつかの変更が加わった。encoding、CPANPLUS、Log::Message、Log::Message::Config、Log::Message::Handlers、Log::Message::Item、Log::Message::Simple、Object::Accessorなどが廃止予定のモジュールとなった。Dereferencingと呼ばれる機能が追加された。」のように表記していたものが「$sref->$*」のように表記できるようになる。新たなスライス表記として、キーと値のペアを戻す「%hash{...}」と「%array[...]」というスライス表記が加わった。subキーワードのprototype属性がサポートされ、プロトタイプパーシングの一貫性も強化された。64ビットプラットフォーム対応が改善され、Perl配列が2**31以上の要素を保持できるようになった。正規表現エンジンは2**31以上の文字列に対応できるようになった。コアモジュールとしてIO::Socket::IPが追加された。rand関数の仕様が変更された。一部のコマンドラインオプションの挙動が変更された。5.22.02015年6月1日ビット単位の演算子が導入された。ダブルダイアモンド演算子が導入された。正規表現の「\b」バウンダリの機能が強化された。正規表現のキャプチャしない修飾子が追加された。'strict'」がサポートされた。7.0がサポートされた。2008のロケール、通貨がサポートされた。古いプラットフォーム上のUTF-8判定が改善された。リファレンスのエイリアスがサポートされた。引数なしのプロトタイプがサポートされた。サブルーチンの「const」アトリビュートがサポートされた。「fileno」にディレクトリハンドルも指定可能になった。Win32でリスト形式のパイプオープンが可能になった。リスト代入の繰返し指定が可能になった。「Inf」と「Nan」の扱いが強化された。浮動小数点数の扱いが強化された。「Inf」と「NaN」の文字列化は致命的エラーになった。実験的なCバックトレースAPIがサポートされた。5.24.02016年5月9日サブルーチンと数値計算が高速化された。8.0のサポートされた。実験的な扱いだった前方デリファレンスが本格サポートされた。エピソード[編集]Perlは当初、新約聖書のマタイによる福音書13章46節の「高価な真珠」にちなんで真珠を意味する「pearl」と名付けられた。ラリー・ウォールは肯定的な意味を持つ短い名前を選びたいと考えていて、彼によれば3文字および4文字の単語を辞書から探したが良いのが見つからなかったということである。彼は妻のグロリアにちなんで名前を付けることも考えたが、家族の会話でまぎらわしいために却下となった。Perlの正式なリリースの前に、すでに「pearl」という名前のプログラミング言語が存在する[1]ことに気づき、綴りを変更して「Perl」とした。このようにPerlは略語ではなく、もともと意味はないが、あとからいくつかの意味が考えられている。lister」(病的折衷主義のガラクタ出力装置)[4]という少し皮肉な意味も込められている。処理系[編集]Perlという名称の記述においては、若干の注意が必要である。プログラミング言語としてのPerlを示すときは「Perl」というように、頭文字を大文字にして固有名詞であることをはっきりさせる。この「Perl」という表記では処理系のことは含まれない。5の現在開発されている唯一の処理系は「perl」という、すべて小文字で記述される名前の処理系である。一般に「perlだけがPerlを解釈することができる」という表現がなされる。「PERL」のようにすべてを大文字にするのは誤りである。5現在において、Perlとは言語の名前であると同時に唯一の処理系の名前でもある。この処理系はC言語で書かれている。スクリプトは実行前に仮想機械向けにコンパイルされ、コンパイルされたバイトコードが実行される(ランタイムコンパイル)。そのため、厳密にはインタプリタとは異なる。Pythonのように一旦生成したバイトコードを保存して再利用することは少ないが、これは現在のPerlのランタイムコンパイルが高速で、バイトコードから実行するメリットがあまりないことが理由の一つである。コンパイル済みコードの再利用としてはむしろmod_perlのような形式が好まれている。いうPerlスクリプトを実行環境ごとアーカイブし、単一のファイルにまとめるためのツールキットも存在する。JARのPerl版と考えてよい。実行可能ファイルを作ることもできるため、アプリケーションの配布に適する。その場合はPerl実行環境をまるごと含むため、ファイルサイズが大きくなる傾向にある。Perlの姉妹言語としてPerl6が存在する。Perl6はParrotというバーチャルマシンの上で動作する。Starという処理系やHaskellで書かれたPugsという処理系などの複数の実装が公開されている。Perl6はPerlと互換性を持たない。2011年7月21日閲覧。外部リンク[編集]ウィキブックスにPerl関連の解説書・教科書があります。ActiveState社のPerlディストリビューション。Win32版はWindows環境で最も利用される。(日時は個人設定で未設定ならばUTC)。表示-継承ライセンスの下で利用可能です。追加の条件が適用される場合があります。詳細は利用規約を参照してください。開発者Cookieに関する声明モバイルビュ。