Perl

ウィキペディアから、無料の百科事典
ナビゲーションにジャンプ 検索にジャンプ

Perl
Perl言語logo.svg
パラダイムマルチパラダイム機能的命令型オブジェクト指向クラスベース)、リフレクティブ
によって設計されたラリーウォール
デベロッパーラリーウォール
初登場1988年2月1日; 34年前[1] (1988-02-01)
安定リリース
  • 5.34.0 [2] / 2021年5月20日; 9ヶ月前 (2021-05-20)
  • 5.32.1 [3] / 2021年1月23日; 13か月前 (2021-01-23)
プレビューリリース
5.35.9 [4] / 2022年2月20日; 4日前 (2022-02-20)
規律の入力動的
実装言語C
OSクロスプラットフォーム
ライセンスArtistic License 1.0 [5] [6]またはGNUGeneral Public License [7]
ファイル名拡張子.plx、.pl、.pm、.xs、.t、.pod、.cgi
Webサイトwww .perl .org
に影響を受けた
AWKBASICCC ++LispsedUnixシェル[8]
影響を受ける
CoffeeScript[要出典] Groovy[要出典] JavaScriptJuliaLPCPHPPythonRakuRubyPowerShell

Perlは、2つの高水準汎用インタプリタ動的プログラミング言語のファミリです「Perl」はPerl5を指しますが、2000年から2019年にかけて、再設計された「姉妹言語」であるPerl 6も指し、その後、後者の名前は2019年10月に正式にRakuに変更されました。 [9] [10]

Perlは正式には頭字語ではありませんが、[11]「実用的な抽出とレポート言語」を含むさまざまなバックロニムが使用されています。[12] Perlは、レポート処理を容易にするための汎用Unixスクリプト言語として1987年にLarryWallによって開発されました。[13]それ以来、多くの変更と改訂が行われてきました。2000年にPerl5の再設計として始まったRakuは、最終的には別の言語に進化しました。両方の言語は、異なる開発チームによって独立して開発され続けており、お互いから自由にアイデアを借りています。

Perl言語は、 CshAWKsedなどの他のプログラミング言語から機能を借用しています[14]これらは、多くの最新のUnixコマンドラインツールの任意のデータ長制限なしでテキスト処理機能を提供します[15] Perl 5は、その強力な正規表現文字列解析機能に一部起因して、 CGIスクリプト言語として1990年代後半に広く普及しました[16] [17] [18] [19]

CGIに加えて、Perl 5は、システム管理ネットワークプログラミング、財務、バイオインフォマティクス、およびGUIなどの他のアプリケーションに使用されます。柔軟性とパワー[20]と醜さから、「スクリプト言語のスイスアーミーチェーンソー」と呼ばれています。[21] 1998年には、グルー言語としてのユビキタスな使用と認識された優雅さの両方に関連して、「インターネットをまとめるダクトテープ」とも呼ばれていました。[22]

Perlは非常に表現力豊かなプログラミング言語です。特定のアルゴリズムのソースコードは短く、圧縮性が高い場合があります。[23] [24]

名前

Perlはもともと「Pearl」と名付けられました。ウォールは、この言語に前向きな意味を持つ短い名前を付けたいと考えていました。Wallは、Perlの公式リリースの前に、既存のPEARLプログラミング言語を発見し、名前のスペルを変更しました。[25]

言語を参照するとき、名前は大文字になります:Perlプログラム自体を参照する場合、ほとんどのUnixライクなファイルシステムでは大文字と小文字が区別されるため、名前は大文字ではありません(perl )。プログラミングPerlの初版がリリースされる前は、この言語をperlと呼ぶのが一般的でしたただし、 Randal L. Schwartzは、植字時に目立つように、本の中で言語の名前を大文字にしています。このケースの区別は、その後、正規のものとして文書化されました。[26]

この名前は、バックロニムとして拡張されることがあります。実用的な抽出とレポート言語[27]と、perlのマニュアルページにあるWall独自のPathologically Eclectic RubbishListerです。[28]

歴史

初期のバージョン

Larry Wallは1987年にPerlの開発を開始し、 Unisysプログラマーとして働いていました[15]。バージョン1.0は1988年2月1日にcomp.sources.unixニュースグループにリリースされました。 [1]言語は次の数年間で急速に拡大しました。年。

1988年にリリースされたPerl2は、より優れた正規表現エンジンを備えていました。1989年にリリースされたPerl3は、バイナリデータストリームのサポートを追加しました。[要出典]

もともと、Perlの唯一のドキュメントは1つの長いmanページでした。1991年に、その表紙のために多くのPerlプログラマーに「CamelBook」として知られているProgramming Perlが発行され、この言語の事実上のリファレンスになりました。同時に、Perlのバージョン番号は4に引き上げられました。これは、言語の大きな変更を示すためではなく、本で十分に文書化されているバージョンを識別するためです。[要出典]

初期のPerl5

Perl 4は一連のメンテナンスリリースを経て、1993年にPerl 4.036で最高潮に達し、その後WallはPerl4を放棄してPerl5での作業を開始しました。Perl5の初期設計は1994年まで続きました。perl5-porters メーリングリストは1994年5月に設立されました。 Perl5をさまざまなプラットフォームに移植する作業を調整します。これは、Perl 5の開発、保守、および移植のための主要なフォーラムであり続けます。[29]

Perl 5.000は1994年10月17日にリリースされました。[30]これはインタプリタのほぼ完全な書き直しであり、オブジェクト参照字句(my)変数モジュールなど、言語に多くの新機能を追加しました重要なことに、モジュールは、インタープリターを変更せずに言語を拡張するためのメカニズムを提供しました。これにより、通常のPerlプログラマーが新しい言語機能を追加できるようになったとしても、コアインタープリターを安定させることができました。それ以来、Perl5は活発に開発されています。[要出典]

Perl 5.001は1995年3月13日にリリースされました。Perl5.002は、新しいプロトタイプ機能を備えた1996年2月29日にリリースされました。これにより、モジュールの作成者は、Perlビルトインのように動作するサブルーチンを作成できました。Perl 5.003は、セキュリティリリースとして1996年6月25日にリリースされました。[要出典]

Perl 5の歴史の中で最も重要なイベントの1つは、適切な言語の外部で発生し、そのモジュールサポートの結果でした。1995年10月26日、Perl言語とPerlモジュールのリポジトリとして包括的なPerlアーカイブネットワーク(CPAN)が設立されました2017年5月の時点で、35,190のディストリビューションで185,178を超えるモジュールを搭載し、13,071を超える作成者によって作成され、245を超える場所で世界中にミラーリングされています。[31]

Perl 5.004は1997年5月15日にリリースされ、特にUNIVERSALパッケージが含まれており、すべてのクラスが自動的に派生するベースオブジェクトと、モジュールのバージョンを要求する機能をPerlに提供します。もう1つの重要な開発は、 CGIスクリプト言語としてのPerlの人気に貢献したCGI.pmモジュール[32]の追加でした。[33]

Perl 5.004は、Microsoft WindowsPlan 9QNX、およびAmigaOSのサポートを追加しました。[32]

Perl 5.005は1998年7月22日にリリースされました。このリリースには、正規表現B::*エンジンへのいくつかの機能拡張、モジュールを介したバックエンドへの新しいフック、qr//正規表現引用演算子、その他の新しいコアモジュールの大規模な選択、およびさらにいくつかのオペレーティングのサポートが含まれていました。 BeOSを含むシステム[34]

2000–2020

メジャーバージョン[35] 最新のアップデート[36]
Old version, no longer maintained:5.4 1999-04-29
Old version, no longer maintained:5.5 1999-03-29
Old version, no longer maintained:5.6 2003-11-15
Old version, no longer maintained:5.8 2008-12-14
Old version, no longer maintained:5.10 2009-08-23
Old version, no longer maintained:5.12 2012-11-10
Old version, no longer maintained:5.14 2013-03-10
Old version, no longer maintained:5.16 2013-03-11
Old version, no longer maintained:5.18 2014-10-02
Old version, no longer maintained:5.20 2015-09-12
Old version, no longer maintained:5.22 2017-07-15
Old version, no longer maintained:5.24 2018-04-14
Old version, no longer maintained:5.26 2018-11-29
Old version, no longer maintained:5.28 2020-06-01
Old version, no longer maintained:5.30 2020-06-01
Older version, yet still maintained:5.32 2021-01-23
Current stable version: 5.34 2021-05-20
Latest preview version of a future release:5.35 2021-05-21
Future release:5.36 2022-05-20
Future release:7.0 2022年?
Legend:
古いバージョン
古いバージョン、まだ維持されている
現在の安定バージョン
最新のプレビューバージョン
将来のリリース

Perl 5.6は2000年3月22日にリリースされました。主な変更には、64ビットのサポート、Unicode文字列表現、2 GiBを超えるファイルのサポート、および「our」キーワードが含まれます。[37] [38] Perl 5.6を開発する際に、バージョン管理スキームを他のオープンソースプロジェクトと同様のもの に切り替えることが決定されました。5.005_63以降、次のバージョンは5.5.640になり、開発バージョンは奇数、安定バージョンは偶数になる予定です。[要出典]

2000年に、WallはコミュニティからPerlの新しいバージョンの提案を求めました。このプロセスの結果、Perl 6の開発をガイドするために使用される361のRFC(コメントの要求)ドキュメントが作成されました。2001年に[39]、変更を要約することを目的とした一連のドキュメントであるPerl6の「黙示録」の作業が開始されました。次世代のPerlの設計を要求して提示します。それらは、正式な文書ではなく、RFCのダイジェストとして提示されました。この時点で、Perl6は言語の記述としてのみ存在していました。[要出典]

Perl 5.8は2002年7月18日に最初にリリースされ、それ以来ほぼ毎年更新されています。Perl 5.8は、Unicodeサポートを改善し、新しいI / O実装を追加し、新しいスレッド実装を追加し、数値精度を改善し、いくつかの新しいモジュールを追加しました。[40] 2013年現在、このバージョンは依然としてPerlの最も人気のあるバージョンであり、Red Hat 5、Suse 10、Solaris 10、HP-UX 11.31、およびAIX5で使用されています。[要出典]

2004年に、「概要」の作業が開始されました。これは、元々黙示録を要約した文書ですが、Perl6言語の仕様になりました。2005年2月、Audrey Tangは、 Haskellで記述されたPerl6インタープリターであるPugsの作業を開始しました[41]これは、Perl6を実現するための最初の協調的な取り組みでした。この努力は2006年に行き詰まりました。[42]

PONIEは、Perl On New InternalEngineの頭字語です。PONIEプロジェクトは2003年から2006年まで存在し、Perl5とPerl6の間の架け橋となる予定でした。これは、Perl6仮想マシンであるParrotで実行するようにPerl5インタープリターを書き直すための取り組みでした。目標は、世界中の何千もの企業で数百万行のPerl5コードの将来を確実にすることでした。[43] PONIEプロジェクトは2006年に終了し、現在は積極的に開発されていません。PONIEの一部としてPerl5インタープリターに加えられた改善のいくつかは、そのプロジェクトに組み込まれました。[44]

Perl 1.0の20周年にあたる2007年12月18日、Perl5.10.0がリリースされました。Perl 5.10.0には、Perl 6に近づいた注目すべき新機能が含まれていました。これらには、switchステートメント(「given」/「when」と呼ばれる)、正規表現の更新、およびスマートマッチ演算子(~~)が含まれていました。[45] [46] この頃、 Parrot仮想マシンと連携して開発されたRakudoPerlと呼ばれるPerl6の別の実装の開発が本格的に開始されました。2009年11月の時点で、Rakudo Perlは定期的に毎月リリースされており、Perl6の最も完全な実装になっています。

Perl5の開発プロセスにおける大きな変更はPerl5.11で発生しました。開発コミュニティは、安定したリリースの年次スケジュールで、開発リリースの月次リリースサイクルに切り替えました。その計画により、バグ修正ポイントリリースは3か月ごとに安定したリリースに従います。[要出典]

2010年4月12日、Perl5.12.0がリリースされました。注目すべきコアの機能強化には、新しいpackage NAME VERSION構文、Yada Yada演算子(まだ実装されていないプレースホルダーコードをマークすることを目的としています)、暗黙の制限、完全なY2038準拠、正規表現変換のオーバーロード、DTraceサポート、およびUnicode5.2が含まれます。[47] 2011年1月21日、Perl5.12.3がリリースされました。更新されたモジュールといくつかのドキュメントの変更が含まれています。[48]バージョン5.12.4は2011年6月20日にリリースされました。そのブランチの最新バージョンである5.12.5は、2012年11月10日にリリースされました。[要出典]

2011年5月14日、JSONサポートが組み込まれたPerl5.14がリリースされました。[49]

2012年5月20日、Perl5.16がリリースされました。注目すべき新機能には、エミュレートしたい特定のバージョンのPerlを指定する機能があり、ユーザーは自分のバージョンのPerlをアップグレードできますが、通常は互換性のない古いスクリプトを実行できます。[50] Perl 5.16は、Unicode6.1をサポートするようにコアも更新します。[50]

2013年5月18日、Perl5.18がリリースされました。注目すべき新機能には、新しいdtraceフック、字句サブ、より多くのCORE :: sub、セキュリティ上の理由によるハッシュのオーバーホール、Unicode6.2のサポートが含まれます。[51]

2014年5月27日、Perl5.20がリリースされました。注目すべき新機能には、サブルーチン署名、ハッシュスライス/新しいスライス構文、後置逆参照(実験的)、Unicode 6.3、一貫した乱数ジェネレーターを使用したrand()が含まれます。[52]

一部のオブザーバーは、Perl5.10のリリースがModernPerlムーブメントの開始であると信じています。[53]特に、このフレーズは、CPANの使用を取り入れ、言語の最近の開発を利用し、高品質のコードの作成に厳密な開発スタイルを説明しています。[54]本「ModernPerl」[55]はこのアイデアの最も目に見える旗手かもしれませんが、Enlightened Perl Organization [56]などの他のグループがその原因を取り上げています。

2012年後半と2013年に、Perl5の代替実装のためのいくつかのプロジェクト開始まし gperl by goccy [60]rperlは、Will Braswellが主導し、Perll11プロジェクトと提携しているKickstarterプロジェクトです。[61]

2020年以降

2020年6月、 Perl7はPerl5の後継として発表されました。[62] Perl7は当初Perl5.32に基づいており、2021年前半にリリースが予定されており、候補版はより早くリリースされる予定でした。[63] この計画は2021年5月に改訂され、ベースラインとして使用するためのリリース期間やPerl5のバージョンは指定されていません。[64] Perl 7がリリースされると、Perl5は長期的なメンテナンスに入ります。ただし、サポートされているPerl 5バージョンは、引き続き重要なセキュリティとバグ修正を取得します。[65]

シンボル

キャメル

O'ReillyMediaが使用するラクダのシンボル

O'ReillyMediaによって発行されたProgrammingPerlは、表紙にヒトコブラクダの絵が描かれており、一般に「キャメルブック」と呼ばれています。[66]この画像は、Tシャツやその他の衣料品に表示される、Perlの非公式のシンボルおよび一般的なハッカーのエンブレムになっています。[要出典]

O'Reillyは画像を商標として所有していますが、非営利目的での使用を許可しており、承認とwww.perl.comへのリンクのみが必要です。商用利用のライセンスは、ケースバイケースで決定されます。[67] O'Reillyは、非営利サイトには「Programming Republic of Perl」のロゴを、Perlを使用するサイトには「PoweredbyPerl」ボタンも提供しています。[67]

タマネギ

PerlFoundationが使用するタマネギのロゴ

Perl Foundationは、代替シンボルであるタマネギを所有しており、その子会社であるPerl MongersPerlMonks、Perl.orgなどにライセンスを供与しています。[68]シンボルは、パールオニオンの視覚なしゃれです[69]

ラプター

代替のPerl5ロゴ

Mojoliciousの作成者であるSebastianRiedelは、ラプター恐竜を描いたロゴを作成しました。これは、CC-SAライセンスバージョン4.0で入手できます。[70]猛禽類の類似物は、2010年に始まったマットSトラウトによる一連の講演から来ています。[71]

概要

Wallによると、Perlには2つのスローガンがあります。1つ目は、一般にTMTOWTDIとして知られている「それを行うには複数の方法があります」です。2番目のスローガンは「簡単なことは簡単で難しいことは可能でなければならない」です。[15]

機能

Perlの全体的な構造は、Cから広く派生しています。Perlは、変数代入ステートメント、中括弧で区切られたブロック制御構造、およびサブルーチンを備えた手続き型です。[72]

Perlはシェルプログラミングからも機能を取り入れています。すべての変数は先頭のシジルでマークされており、変数を文字列に直接補間することができます。ただし、シェルとは異なり、Perlは変数へのすべてのアクセスにsigilsを使用し、sigilsを使用する他のほとんどのプログラミング言語とは異なり、sigilは変数のタイプではなく式のタイプを示します。したがって、たとえば、配列はsigil "@"(たとえば)で示されますが、配列の個々のメンバーはスカラーsigil "$"(たとえば)で示されます。Perlには、ソートなどのシェルプログラミングでよく使用されるツールを提供する多くの組み込み関数もあります(ただし、これらのツールの多くはシェルの外部のプログラムによって実装されます)。@arrayname$arrayname[3]、およびオペレーティングシステム機能の呼び出し[要出典]

Perlは、 AWKからハッシュ(「連想配列」)を取得し、 sedから正規表現を取得します。これらは、多くの解析、テキスト処理、およびデータ管理タスクを簡素化します。Lispと共有されるのは、ブロック内の最後の値の暗黙の戻りであり、すべてのステートメントは、より大きな式自体で使用できる式でもあります。[要出典]

Perl 5は、複雑なデータ構造ファーストクラスの関数(つまり、値としてのクロージャ)、およびオブジェクト指向プログラミングモデルをサポートする機能を追加しました。これらには、参照、パッケージ、クラスベースのメソッドディスパッチレキシカルスコープの変数、およびコンパイラ指令(たとえば、strict プラグマ)が含まれます。Perl 5で導入された主な追加機能は、コードを再利用可能なモジュールとしてパッケージ化する機能でした。Wallは後に、「Perl 5のモジュールシステムの全体的な目的は、Perlコアではなく、Perl文化の成長を促進することでした」と述べています。[73]

Perlのすべてのバージョンは、自動データ入力と自動メモリ管理を行います。インタプリタは、プログラム内のすべてのデータオブジェクトのタイプとストレージ要件を知っています。必要に応じて、参照カウントを使用してストレージを割り当て、解放します(したがって、手動の介入なしに循環データ構造の割り当てを解除することはできません)。法的な型変換(たとえば、数値から文字列への変換)は、実行時に自動的に行われます。不正な型変換は致命的なエラーです。[要出典]

デザイン

Perlの設計は、ハードウェアコストの低下、人件費の上昇、コンパイラテクノロジの改善という、コンピュータ業界の3つの幅広いトレンドへの対応として理解できます。FortranやCなどの初期のコンピューター言語の多くは、高価なコンピューターハードウェアを効率的に使用することを目的としていました。対照的に、Perlは、コンピュータープログラマーがプログラムをより迅速かつ簡単に作成できるように設計されています。[要出典]

Perlには、 CPUとメモリの要件が大きくなる代わりに、プログラマーの作業を容易にする多くの機能があります。これらには、自動メモリ管理が含まれます。動的型付け; 文字列、リスト、およびハッシュ。正規表現; 内省; eval()関数。Perlは、「組み込みの制限なし」[66]の理論に従い、 Zero OneInfinityルールに似ています。[要出典]

Wallは言語学者として訓練されており、Perlの設計は言語学の原則によって非常に多くの情報を得ています。例としては、ハフマンコーディング(一般的な構造は短くする必要があります)、適切な端部均等化(重要な情報が最初に来る必要があります)、および言語プリミティブの大規模なコレクションがあります。Perlは、Perlインタープリターを複雑にする場合でも、人間が書くのに簡潔で自然な言語構造を好みます。[74]

Perlの構文は、「異なるものは異なって見えるべきである」という考えを反映しています。[75]たとえば、スカラー、配列、およびハッシュには、異なる先頭のシジルがあります。配列インデックスとハッシュキーは、異なる種類の中括弧を使用します。文字列と正規表現には、異なる標準区切り文字があります。このアプローチは、Lispなどの言語とは対照的です。Lispでは、単純で普遍的な記号式で構成される同じ基本構文がすべての目的で使用されます。[要出典]

Perlは、特定のプログラミングパラダイム手続き型オブジェクト指向関数型など)を強制したり、プログラマーにそれらの中から選択することを要求したりしません。[要出典]

Perl言語とそれを取り巻くコミュニティと文化の両方に幅広い実践的な傾向があります。プログラミングPerlの序文は始まります:「Perlはあなたの仕事を成し遂げるための言語です。」[15]この結果の1つは、Perlがきちんとした言語ではないということです。多くの機能が含まれ、ルールの例外を許容し、ヒューリスティックを使用して構文のあいまいさを解決します。コンパイラの寛容な性質のため、バグを見つけるのが難しい場合があります。Perlの関数ドキュメントは、リストおよびスカラーコンテキストでの組み込み関数のさまざまな動作について、「一貫性が必要でない限り、一般に、必要なことを実行します」と述べています。[76]

PerlバージョンからPerl5までのPerl言語の仕様書や標準は存在せず、現在のバージョンのPerl用に作成する予定はありません。インタプリタの実装は1つしかなく、言語もそれに伴って進化してきました。そのインタプリタは、その機能テストとともに、言語の事実上の仕様として機能します。ただし、Perl 6は仕様から始まり[77]、いくつかのプロジェクト[78]は、仕様の一部またはすべてを実装することを目的としています。[要出典]

アプリケーション

Perlには多くの多様なアプリケーションがあり、多くの標準およびサードパーティのモジュールが利用可能であることが複合されています。

Perlは主にCGIスクリプトの記述に使用されてきました。Perlで記述された大規模なプロジェクトには、cPanel Slash Bugzilla RT TWiki およびMovableTypeが含まれます。Perlを広範囲に使用するトラフィックの多いWebサイトには、Priceline.comCraigslist[79] IMDb[80] LiveJournalDuckDuckGo[81] [82] SlashdotTicketmasterなどがあります。また、 Web開発用の人気のあるLAMPテクノロジースタックのオプションコンポーネントでもあります PHPまたはPythonの代わりに。Perlは、DebianLinuxディストリビューションのシステムプログラミング言語として広く使用されています。[83]

Perlは、相互運用するように特別に設計されていないシステムとインターフェースを結び付けるグルー言語として、また「データの変更」[84]、つまりレポートの作成などのタスクのために大量のデータを変換または処理するためによく使用されます。実際、これらの強みは密接に関連しています。この組み合わせにより、Perlはシステム管理者に人気のある万能言語になります。特に、「ワンライナープログラム」と呼ばれることが多い短いプログラムを単一のコマンドラインで入力して実行できるためです。[要出典]

PerlコードはWindowsとUnix間で移植可能にすることができます。このようなコードは、ソフトウェアのビルドスクリプトと展開スクリプトのパッケージ化と保守を簡素化するために、ソフトウェアのサプライヤ( COTSとオーダーメイドの両方)によってよく使用されます。[要出典]

Perl / TkおよびwxPerlは、通常、グラフィカルユーザーインターフェイスをPerlスクリプト に追加するために使用されます。

実装

Perlは、Cで記述されたコアインタープリターとして、PerlおよびCで記述されたモジュールの大規模なコレクションとともに実装されます。2010年の時点で、インタープリターは150,000行のCコードであり、一般的なマシンアーキテクチャで1MBの実行可能ファイルにコンパイルされます。または、インタプリタをリンクライブラリにコンパイルして、他のプログラムに埋め込むこともできます。ディストリビューションには500近くのモジュールがあり、200,000行のPerlと追加の350,000行のCコードで構成されています(モジュール内のCコードの多くは文字エンコードテーブルで構成されています)。[要出典]

インタプリタにはオブジェクト指向のアーキテクチャがあります。Perl言語のすべての要素(スカラー、配列、ハッシュ、コード参照、ファイルハンドル)は、インタープリターでC構造体によって表されます。これらの構造体に対する操作は、マクロtypedef、および関数の大規模なコレクションによって定義されます。これらはPerlCAPIを構成しますPerl APIは初心者には戸惑うかもしれませんが、そのエントリポイントは一貫した命名スキームに従っており、それを使用する人にガイダンスを提供します。[要出典]

Perlインタープリターの寿命は、コンパイルフェーズと実行フェーズに大きく分けられます。[85] Perlでは、フェーズはインタプリタのライフサイクルの主要な段階です。各インタプリタは各フェーズを1回だけ通過し、フェーズは固定された順序で続きます。[要出典]

Perlのコンパイルフェーズで行われることのほとんどはコンパイルであり、Perlの実行フェーズで行われることのほとんどは実行ですが、重大な例外があります。Perlは、コンパイル段階でPerlコードを実行する機能を重要に利用しています。Perlはまた、実行フェーズへのコンパイルを遅らせます。ある時点で実際に発生している処理の種類を示す用語は、コンパイル時実行時です。Perlは、コンパイルフェーズのほとんどの時点でコンパイル時ですが、コンパイル時は実行フェーズでも入力できます。evalビルトインに渡される文字列引数のコードのコンパイル時は、実行フェーズ中に発生します。Perlは多くの場合、コンパイルフェーズ中に実行時に使用され、実行フェーズのほとんどを実行時に費やします。コードインBEGINブロックは実行時に実行されますが、コンパイルフェーズで実行されます。

コンパイル時に、インタプリタはPerlコードを構文ツリーに解析します。実行時に、ツリーを歩いてプログラムを実行します。テキストは1回だけ解析され、構文ツリーは実行前に最適化されるため、実行は比較的効率的です。構文ツリーでのコンパイル時の最適化には、定数畳み込みとコンテキスト伝播が含まれますが、のぞき穴の最適化も実行されます。[86]

Perlには、コンパイルフェーズ中に実行される実行時コードの影響を受ける可能性があるため、チューリング完全な 文法があります。[87]したがって、PerlはLex / Yacc レクサー/パーサーの単純な組み合わせでは解析できません。代わりに、インタープリターは独自のレクサーを実装します。このレクサーは、変更されたGNU bisonパーサーと連携して、言語のあいまいさを解決します。[要出典]

「PerlのみがPerlを解析できる」とよく言われますが[88]、Perlインタプリタ(perl)のみがPerl言語(Perl)を解析できることを意味しますが、これでも一般的には当てはまりません。Perlインタープリターはコンパイルフェーズ中にチューリングマシンをシミュレートできるため、すべての場合に解析を完了するために停止問題を決定する必要があります。停止問題が決定不可能であるというのは長年の結果であり、したがって、perlでさえ常にPerlを解析できるわけではありません。Perlは、独自のコンパイルフェーズでユーザーに完全なプログラミング能力へのアクセスを許可するという珍しい選択をします。理論的な純度という点ではコストは高いですが、実際的な不便はめったにないようです。[要出典]

ソースコードアナライザー自動インデンターなど、Perlの解析を行う他のプログラムは、あいまいな構文構造だけでなく、一般的な場合のPerl解析の決定不能性とも対処する必要があります。Adam KennedyのPPIプロジェクトは、Perlを実行可能コードとして解析するのではなく(Perl自体でさえ常に実行できるわけではない)、Perlコードをドキュメントとして解析する(ドキュメントとしての整合性を維持する)ことに焦点を当てました。「Perlの構文解析は「停止問題」に苦しんでいる」と最初に推測したのはケネディであり[89]、後に証明されました。[90]

Perlは、コアPerl言語用の250,000以上の機能テストと、コアモジュール用の250,000以上の機能テストとともに配布されています。これらは通常のビルドプロセスの一部として実行され、インタープリターとそのコアモジュールを広範囲に実行します。Perl開発者は、インタプリタへの変更によってソフトウェアのバグが発生しないことを確認するために機能テストに依存していますさらに、インタープリターがシステムの機能テストに合格したことを確認したPerlユーザーは、インタープリターが正しく機能していることを確信できます。[要出典]

可用性

Perlは、 Artistic License 1.0 [5] [6]GNUGeneral PublicLicenseの両方でデュアルライセンスされています。[7]ディストリビューションはほとんどのオペレーティングシステムで利用できます。これは、 UnixおよびUnixライクなシステムで特に普及していますが、ほとんどの最新の(そして多くの廃止された)プラットフォームに移植されています。報告された例外が6つしかないため PerlはすべてのPOSIX準拠またはその他のUnix互換プラットフォームのソースコードからコンパイルできます。[91]

従来のMacOS環境では通常とは異なる変更が必要なため、MacPerlと呼ばれる特別なポートが個別に出荷されました。[92]

包括的なPerlアーカイブネットワークには、サポートされているプラ​​ットフォームの完全なリストと、それぞれで利用可能なディストリビューションへのリンクが含まれています。[93] CPANは、コアPerlディストリビューションの一部ではない公開されているPerlモジュールのソースでもあります。[要出典]

Windows

Microsoft Windowsのユーザーは通常、Perl for Win32のネイティブバイナリディストリビューションの1つ、最も一般的にはStrawberryPerlまたはActivePerlをインストールします。WindowsでソースコードからPerlをコンパイルすることは可能ですが、ほとんどのインストールには必要なCコンパイラとビルドツールがありません。これにより、CPANからモジュール、特に部分的にCで記述されたモジュールをインストールすることも困難になります。[要出典]

ActivePerlは、コアPerlリリースを追跡する定期的なリリースを持つActiveStateからのクローズドソースディストリビューションです。[94]以前のディストリビューションにはPerlパッケージマネージャー(PPM)が含まれていました。 [95]一般的なPerlモジュールの使用をインストール、削除、アップグレード、および管理するための一般的なツールです。ただし、このツールはActivePerl5.28で廃止されました。[96] Perl言語を実装するWindowsScript Host (WSH)エンジンであるPerlScriptも含まれています。Visual Perlは、PerlをVisual Studio.NET開発スイートに追加するActiveStateツールです。VBScript _-to-Perlコンバーター、Windows用のPerlコンパイラー、awkおよびsedからPerlへのコンバーターもこの会社によって作成され、ActiveState CD for Windowsに含まれています。これには、すべてのディストリビューションに加えて、KomodoIDEと2002年以降のUnix / Linux / Posixバリアントの最初のものを除くすべて。[97]

Strawberry Perlは、Windows用のオープンソースディストリビューションです。2008年1月から定期的に四半期ごとにリリースされており、フィードバックやリクエストが届いたときに新しいモジュールが含まれています。StrawberryPerlは、XSモジュールのコンパイルなど、他のプラットフォームに標準のPerlディストリビューションなどのモジュールをインストールできるようにすることを目指しています。[要出典]

Cygwinエミュレーションレイヤーは、WindowsでPerlを実行するもう1つの方法です。CygwinはWindows上でUnixライクな環境を提供し、PerlとCPANの両方がCygwinセットアッププログラムの標準のプリコンパイル済みパッケージとして利用可能です。Cygwinにはgccも含まれているため、ソースからPerlをコンパイルすることも可能です。[要出典]

perl実行可能ファイルは、他のスクリプトツールとともにディレクトリ内のいくつかのWindowsリソースキットに含まれています。[要出典]

Perlの実装には、MKS ToolkitInterix ( Unix用のWindows Servicesの以前の実装のベース)、およびUWINが付属しています。[要出典]

データベースインターフェイス

Perlのテキスト処理機能は、SQLクエリの生成に使用できます。配列、ハッシュ、および自動メモリ管理により、返されたデータの収集と処理が簡単になります。たとえば、TimBunceのPerlDBI アプリケーションプログラミングインターフェイス(API)では、APIへの引数をSQLクエリのテキストにすることができます。したがって、同時に複数の言語でプログラミングすることが可能です(たとえば、ヒアドキュメントでHTMLJavaScript、およびSQLを使用してWebページを生成する場合)。Perl変数補間の使用各SQLクエリをプログラムでカスタマイズし、各SQLクエリの結果のデータセットをプログラムで保持するための構造としてPerl配列またはハッシュを指定すると、後処理のために大量のデータを処理するための高レベルのメカニズムが可能になります。 Perlサブプログラム。[98] Perlの初期のバージョンでは、データベースインターフェイスは、インタプリタをクライアント側のデータベースライブラリに再リンクすることによって作成されていました。これは十分に困難であったため、最も重要で最も広く使用されているデータベースのいくつかに対してのみ実行され、結果のperl実行可能ファイルは一度に1つのデータベースインターフェイスのみを使用するように制限されていました。[99]

Perl 5では、データベースインターフェイスはPerlDBIモジュールによって実装されます。DBI(データベースインターフェイス)モジュールは、Perlアプリケーションへの単一のデータベースに依存しないインターフェイスを提供し、DBD(データベースドライバ)モジュールは、約50の異なるデータベースへのアクセスの詳細を処理します。ほとんどのANSISQL データベースにはDBDドライバーがあります。[100]

DBIは、データベースハンドルとクエリのキャッシュを提供します。これにより、 mod perl [101]などの長期実行環境でのパフォーマンスが大幅に向上し、大量のシステムがスラッシュドット効果のように負荷の急上昇を回避できるようになります。[102]

最近のPerlアプリケーション、特にCatalystなどのWebフレームワークを使用して記述されたアプリケーションでは、DBIモジュールは、 DBIx :: Class、Class :: DBI [103]、Rose :: DB :: Object [などのオブジェクトリレーショナルマッパーを介して間接的に使用されることがよくあります。 104] SQLクエリを生成し、アプリケーションの作成者に対して透過的にデータを処理します。[105]

比較パフォーマンス

Computer Language Benchmarks Gameは、いくつかのプログラミング言語での典型的なプログラミング問題の実装のパフォーマンスを比較します。[106]提出されたPerl実装は通常、メモリ使用量スペクトルのハイエンドに向けて実行され、さまざまな速度の結果をもたらします。ベンチマークゲームでのPerlのパフォーマンスは、インタプリタ言語では一般的です。[107]

大規模なPerlプログラムは、実行するたびにソースをコンパイルする必要があるため、コンパイルされた言語の同様のプログラムよりも起動が遅くなります。YAPC :: Europe 2005カンファレンスとその後の記事「ATimelyStart」での講演で、Jean-Louis Leroyは、perlインタープリターが彼の特大の中のモジュールを見つけるのにかなりの時間を費やしたため、Perlプログラムの実行に予想よりもはるかに長い時間がかかることを発見しました。パスを含めます。[108] Java、Python、Rubyとは異なり、Perlはプリコンパイルを実験的にサポートしているだけです。[109]したがって、Perlプログラムは実行ごとにこのオーバーヘッドペナルティを支払います。一般的なプログラムの実行フェーズは、償却するのに十分な長さです起動時間はそれほど大きくありませんが、非常に短い実行時間を測定するベンチマークは、このオーバーヘッドのために歪んでいる可能性があります。[110]

この状況を改善するために、多くのツールが導入されています。最初のそのようなツールはApacheのmodperlであり、小さなPerlプログラムが急速に呼び出される最も一般的な理由の1つであるCGIWeb開発に 対処しようとしました。ActivePerlは、Microsoft ISAPIを介して、同様のパフォーマンスの向上を提供します。[111]

Perlコードがコンパイルされると、実行フェーズ中に追加のオーバーヘッドが発生します。これは通常、CやC ++などのコンパイルされた言語で記述されたプログラムには存在しません。このようなオーバーヘッドの例には、バイトコードの解釈、参照カウントのメモリ管理、動的型チェックなどがあります。[112]

最適化

最も重要なルーチンは他の言語(Cなど)で書くことができ、単純なインラインモジュールまたはより複雑で柔軟なXSメカニズムを介してPerlに接続できます。[113]

Perl 5

通常「Perl」と呼ばれる言語であるPerl5は、引き続き活発に開発されています。Perl 5.12.0は2010年4月にリリースされ、Perl 6、 [47] [114]、続いてPerl 5.14.1(2011年6月17日にリリース)、Perl 5.16.1(8月にリリース)の設計に影響されたいくつかの新機能があります。2012年9月9日。[115])、およびPerl 5.18.0(2013年5月18日にリリース)。Perl 5開発バージョンは毎月リリースされ、メジャーリリースは年に1回リリースされます。[116]

「Perlプログラミング」のインターネット検索の相対的な割合は、他のプログラミング言語の同様の検索と比較して、2005年の約10%から2011年の約2%、2020年の約0.7%に着実に減少しました。[117]

Raku(Perl 6)

カメリア、Perl6プロジェクトのロゴ[118]

2000年のPerlConferenceで、JonOrwantは主要な新しい言語イニシアチブを主張しました。[119]これにより、Perl 6と呼ばれる言語の再設計の作業を開始することが決定されました。新しい言語機能の提案は、300を超えるRFCを提出したPerlコミュニティ全体から求められました。[120]

Wallは、RFCを消化し、Perl 6の一貫したフレームワークに合成するために、次の数年を費やしました。彼は、Perl6の設計を「黙示録」と呼ばれる一連のドキュメントで発表しまし2011年1月の時点で、Perl 6の開発仕様は、黙示録に対応する番号が付けられた概要と呼ばれる設計ドキュメントにカプセル化されていました。[121]

Wallが監督するBradleyM。Kuhnによる論文の作業では、PerlのランタイムとしてJava仮想マシンを使用できる可能性を検討まし[122]クーンの論文は、このアプローチが問題があることを示した。2001年に、Perl6はParrotと呼ばれる言語間仮想マシンで実行されることが決定されました。これは、オウムを対象とする他の言語がCPANへのネイティブアクセスを取得し、ある程度の言語間の開発を可能にすることを意味します。[要出典]

2005年、Audrey Tangは、 HaskellでのPerl6の実装であるPugsプロジェクトを作成しましたこれは、(実際の実装の開発とは別に)Perl 6言語のテストプラットフォームとして機能し、引き続き機能します。これにより、言語設計者は探索することができます。Pugsプロジェクトは、 Libera Chat #rakuIRCチャネルを中心としたアクティブなPerl / Haskellクロスランゲージコミュニティを生み出しました。多くの関数型プログラミングの影響は、Perl6設計チームによって吸収されました。[123]

2012年、Perl6の開発は主に2つのコンパイラに集中していました。[124]

  1. Rakudo、Parrot仮想マシンとJava仮想マシンで実行される実装。[125]
  2. 共通言語ランタイムを対象とするNiecza

2013年には、主にRakudo向けに設計されたC言語ベースの仮想マシンであるMoarVM (「MetamodelOn ARuntime」)が発表されました。[126]

2019年10月、Perl6はRakuに名前が変更されました。[127]

2017年現在、Rakudoの実装とMoarVMのみが活発に開発されており、Java仮想マシンやJavaScriptなどの他の仮想マシンがサポートされています。[128]

Perl 7

Perl 7は、2020年6月24日に「クラウドでのPerlカンファレンス」でPerl5の後継として発表されました。[63] [62] Perl 5.32に基づいて、Perl7は最新のPerl5コードと下位互換性を持つように設計されています。ボイラープレート(プラグマ)ヘッダーのないPerl 5コードは、use compat::perl5;互換性を維持 するために追加する必要がありますが、最新のコードではボイラープレートの一部が削除される可能性があります。

Perlコミュニティ

Perlの文化とコミュニティは、言語自体とともに発展してきました。Usenetは、Perlが導入された最初の公共の場でしたが、その進化の過程で、Perlのコミュニティは、ワールドワイドウェブの導入を含むインターネットベースのサービスの拡大によって形成されました。実際、Perlを取り巻くコミュニティは、Wallの最初の「StateoftheOnion」トークのトピックでした。[129]

タマネギの状態

State of the Onionは、Perlとそのコミュニティの進歩に関するWallの毎年の基調講演スタイルの要約の名前です。それらは、Perlの文化、より広いハッカー文化、ウォールの言語的背景、時には彼の家族生活、そして時には彼のキリスト教の背景への言及を採用した、彼の特徴的なユーモアによって特徴付けられます。[130]

各講演は、最初にさまざまなPerl会議で行われ、最終的にはオンラインでも公開されます。

Perlの娯楽

JAPH

電子メール、Usenet、および掲示板の投稿では、「Just another Perl hacker」(JAPH)プログラムが一般的な傾向であり、最も初期のプロのPerlトレーナーの1人であるRandal L.Schwartzが考案しました。[131] Perl文化の用語では、PerlプログラマーはPerlハッカーとして知られており、これから、「ちょうど別のPerlハッカー」というフレーズを印刷するための短いプログラムを書く習慣が生まれます。元の概念の精神では、これらのプログラムは適度に難読化されており、電子メールまたはUsenetメッセージの署名に収まるほど短くなっています。Schwartzによって開発された「正規の」JAPHには、末尾にコンマが含まれていますが、これはしばしば省略されます。[132]

Perlゴルフ

Perlの「ゴルフ」は、Perlプログラムで使用される文字(キーの「ストローク」)の数を最小限に抑える娯楽です。これは、ゴルフプレーヤーがラウンドでできるだけ少ないショットを撮ろうとするのとほぼ同じです。このフレーズの最初の使用[133]は、初心者を教えることを目的とした歩行者コードと、経験豊富なPerlプログラマーを楽しませる可能性のある簡潔なハックの違いを強調しました。後者の例は、Usenetの投稿やその他の場所で署名にすでに使用されているJAPHです。同様のスタントは、過去数十年間、 APL言語では名前のない娯楽でした。Perlを使用してRSA暗号化を実行するプログラムを作成することで、この娯楽への幅広い実用的な関心が高まりました。[134]その後、「コードゴルフ」という用語が他の言語の娯楽に適用されました。[135] Perl Golf Apocalypseは、2000年7月にカリフォルニア州モントレーで開催されたPerl Conference4.0で開催されました。

難読化

Cと同様に、難読化されたコードの競争は1990年代後半のよく知られた娯楽でした。Obfuscated Perl Contestは、 1996年から2000年にかけてPerl Journalによって開催されたコンテストであり、Perlの構文の柔軟性を大いに活用しました。スペースを有効に活用した「最も強力な」プログラムや、Usenet署名ブロックのスタイルで76文字の4行に収まるプログラムの「最高の4行署名」などのカテゴリで賞が授与されました[136]

Perlの詩は、合法的なPerlコードとしてコンパイルできる詩を書く習慣です。たとえば、BlackPerlとして知られているものですPerlの詩は、Perl言語で使用される多数の英語の単語によって可能になります。新しい詩は、PerlMonksのコミュニティに定期的に送信されます。[137]

IRC上のPerl

多くのIRCチャネルは、Perlとそのモジュールの一部をサポートしています。

IRCネットワーク チャンネル
irc.libera.chat #perl #raku
irc.perl.org #moose #poe#catalyst#dbix-class#perl-help #distzilla #epo #corehackers#sdl#win32 #toolchain #padre #dancer
irc.slashnet.org #perlmonks
irc.oftc.net #perl#debian-perl(Debian用のPerlモジュールのパッケージ化)
irc.efnet.net #perlhelp
irc.rizon.net #perl

CPAN Acme

CPANの娯楽のためだけに書かれたコードの例もたくさんありますLingua::Romana::Perligataたとえば、ラテン語でプログラムを作成できます。[138]このようなプログラムを実行すると、モジュールはそのソースコードを通常のPerlに変換して実行します。[要出典]

Perlコミュニティは、本質的に楽しいモジュール用に「Acme」名前空間を確保しました(ただし、その範囲は、探索的または実験的なコード、または本番環境で使用されることを意図していないその他のモジュールを含むように拡大されました)。Acmeモジュールのいくつかは、面白い方法で意図的に実装されています。これには、名前空間Acme::Bleachの最初のモジュールの1つである[139]が含まれます。これにより、プログラムのソースコードを「白くする」(つまり、すべての文字を空白に置き換える)ことができ、それでも機能します。[要出典]Acme::

サンプルコード

古いバージョンのPerlでは、HelloWorldプログラムを 次のように記述します。

print  "Hello、World!\ n" ;

これは、指定された開始値から秒数をカウントダウンする、より複雑なPerlプログラムです。

#!/ usr / bin / perl 
use  strict ; 
警告を使用します ;

my   $ initial  $ total  );

$ initial  =  $ total  =  shift @ARGV );

STDOUT- >自動フラッシュ1 );

while   $ resumeing   { 
    printf   "Remaining%s /%s \ r"  $リジン-  $ total  ); 
    睡眠 1 ; 
}

印刷 "\ n" ;

perlインタープリターは、コマンドラインの1回限りのスクリプトにも使用できます。次の例(Bashなどのsh互換シェルから呼び出される)は、現在のディレクトリの.txtで終わるすべてのファイルの文字列「Bob」を「Robert」に変換します。

$ perl -i.bak -lp -e 's / Bob / Robert / g ' * .txt

批評

Perlは、批評家から「ラインノイズ」および書き込み専用言語と呼ばれてきました。そのような最初の言及は、 Randal L.Schwartzによって書かれたPerl4チュートリアルブックであるLearningPerlの初版[140]にあり、その最初の章で次のように述べています。初心者ではありますが、経験豊富なPerlプログラマーにとっては、人生の使命を持ったチェックサムのラインノイズのように見えます。」[141]彼はまた、Perlが書き込み専用言語であるという非難は、「適切な注意」を払ってコーディングすることで回避できると述べた。[141] Perlの概要文書perlintroには、組み込みの「魔法」の名前が記載されています変数は「句読点やラインノイズのように見えます」。[142]ただし、英語モジュールは、長い英語と短い英語の両方の選択肢を提供します。perlstyleドキュメントには、正規表現のラインノイズは、/x修飾子を使用して空白を追加することで軽減できると記載されています。[143]

Perl 6 FAQによると、 Perl 6は、「句読点変数の大部分」の削除や正規表現構文のサニタイズなど、Perl5批評家からの「ラインノイズ」の主張を引き出す「通常の容疑者」を軽減するように設計されました。 。[144] Perl 6 FAQには、動名詞前置詞が英語の一部であるのと同じように、Perlのラインノイズと呼ばれることもあるは「言語の実際の構文」であるとも記載されています[144] 2012年12月のブログ投稿では、「Rakudo Perl 6は失敗し、大人の監督が得られない限り失敗し続ける」と主張しているにもかかわらず、有彩色Perl 6の設計には、「明確に定義された文法」と「改良された型システム、インテリジェントなメタモデルを備えた統合オブジェクトシステム、メタ演算子、および広範な怠惰などの優れたコンテキストを提供するより明確なコンテキストシステム」があると述べています。 。[145]彼はまた、「Perl6にはPerl5にはない一貫性と一貫性がある」と述べた。[145]

も参照してください

参考文献

  1. ^ a b "v13i001:Perl、awkおよびsedの「置換」、Part01 / 10"comp.sources.unixアーカイブ2021年8月11日取得
  2. ^ 「Perl5.34.0が利用可能になりました!」www.nntp.perl.org 2021年5月21日取得
  3. ^ 「Perl5.32.1が利用可能になりました!」www.nntp.perl.org。2021年1月24日にオリジナルからアーカイブされました2021年1月24日取得
  4. ^ 「Perl5.35.9が利用可能になりました!」www.nntp.perl.org 2022年2月24日取得
  5. ^ a b "「ArtisticLicense」-dev.perl.org"dev.perl.org2018年7月24日にオリジナルからアーカイブされました2016年6月24日取得
  6. ^ a b Artistic Archived 2018年7月25日、WaybackMachine -Perl 5gitリポジトリのファイル
  7. ^ a b "Perlライセンス"dev.perl.org。2011年1月22日にオリジナルからアーカイブされました2011年1月8日取得
  8. ^ ラリーウォール(2007年12月12日)。「プログラミングは難しい、スクリプティングに行こう...」 2017年7月28日にオリジナルからアーカイブされました2019年4月14日取得すべての言語設計者には、時折の特異性があります。私は他の人よりも上手です。
  9. ^ 「Perlについて」perl.org。2015年11月6日にオリジナルからアーカイブされました2013年4月20日取得「Perl」は言語のファミリーであり、「Perl 6」はファミリーの一部ですが、独自の開発チームを持つ別の言語です。その存在は、「Perl5」の継続的な開発に大きな影響を与えません。
  10. ^ 「楽への道」GitHub。2020年11月12日にオリジナルからアーカイブされました2021年1月14日取得このドキュメントでは、Perl6の名前をRakuに変更するために実行する手順について説明します。
  11. ^ ラップワース、レオ。「Perlに関する一般的な質問」PerlFAQPerl.org。2013年6月22日にオリジナルからアーカイブされました2012年2月24日取得
  12. ^ "perl(1):実用的な抽出/レポート言語-Linuxのマニュアルページ"Linux.die.net。2013年6月22日にオリジナルからアーカイブされました2013年7月23日取得
  13. ^ シェパード、ダグ(2000年10月16日)。「初心者によるPerl入門」dev.perl.org。2011年6月5日にオリジナルからアーカイブされました2011年1月8日取得
  14. ^ アシュトン、エレイン(1999)。「Perlのタイムラインとその文化(v3.0_0505)」2013年1月11日にオリジナルからアーカイブされました2004年3月12日取得
  15. ^ a b c d 壁、ラリー; クリスチャンセン、トム; Orwant、Jon(2000年7月)。プログラミングPerl、第3版オライリーメディアISBN 978-0-596-00027-1
  16. ^ 「言語評価」2015年3月10日にオリジナルからアーカイブされました2015年1月30日取得Perlの最大の強みは、テキストの行指向のデータ形式をパターン指向で処理するための非常に強力な組み込み機能です。これで卓越しています。
  17. ^ 「あなたはPerlを使って何を書いたのですか?!」2008年1月24日。2015年2月4日のオリジナルからアーカイブ2015年2月4日取得perlは、パターンマッチング入力を含むすべてのタスクの頼りになる言語でした。
  18. ^ 「Perlの重要性」2015年2月2日にオリジナルからアーカイブされました2015年2月4日取得テキストを処理するPerlの比類のない能力...
  19. ^ Smith、Roderick W.(2002年6月21日)。高度なLinuxネットワーキングアディソン-ウェスリープロフェッショナル。p。 594ISBN 978-0-201-77423-8
  20. ^ シェパード、ダグ(2000年10月16日)。「初心者によるPerl入門」オライリーメディア2008年6月4日にオリジナルからアーカイブされました2008年7月27日取得
  21. ^ レイモンド、エリック(2003年12月23日)。「スイスアーミーチェーンソー」ジャーゴンファイル2018年8月14日にオリジナルからアーカイブされました2014年11月29日取得
  22. ^ レナード、アンドリュー。「Perlの喜び」Salon.com2012年7月6日にオリジナルからアーカイブされました2012年6月5日取得
  23. ^ 「プログラムの測定方法|コンピューター言語ベンチマークゲーム」ベンチマークゲーム-team.pages.debian.net2020年7月12日にオリジナルからアーカイブされました2020年10月5日取得
  24. ^ 「perlの3行のRSA-Everything2.com」every2.com2020年10月8日にオリジナルからアーカイブされました2020年10月5日取得
  25. ^ リチャードソン、マージョリー(1999年5月1日)。「Perlの第一人者、ラリー・ウォール」LinuxJournal2013年6月22日にオリジナルからアーカイブされました2011年1月3日取得
  26. ^ 「perlfaq1:「perl」と「Perl」の違いは何ですか?」perldoc.perl.org-Perl5バージョン12.2のドキュメント2013年5月12日にオリジナルからアーカイブされました2007年6月4日取得
  27. ^ シュワルツ、ランダル; フォイ、ブライアン; フェニックス、トム(2011年6月16日)。Perlの学習O'Reilly Media、Inc.p。 4ISBN 978-1449313142Perlは、「実用的な抽出およびレポート言語」と呼ばれることもありますが、他の拡張の中でも「病理学的に折衷的なRubbishLister」とも呼ばれています。Perlの作成者であるLarryWallが最初に名前を思いつき、後で拡張を思いついたので、これは実際には頭字語ではなく、バックロニムです。そのため、「Perl」はすべて大文字ではありません。拡張が正しいと主張する意味はありません。ラリーは両方を支持しています。
  28. ^ 壁、ラリー"perl-Perl言語インタープリター"Perl5バージョン12.2のドキュメント2013年6月22日にオリジナルからアーカイブされました2011年1月26日取得
  29. ^ 「perl.perl5.portersアーカイブ」perl.org。2011年5月1日にオリジナルからアーカイブされました2011年1月13日取得
  30. ^ "perlhist —Perlの履歴レコード"Perl5バージョン12.2のドキュメントperldoc.perl.org。2011年1月13日にオリジナルからアーカイブされました2011年1月21日取得
  31. ^ 「CPAN」CPAN2019年10月3日にオリジナルからアーカイブされました2017年5月8日取得
  32. ^ a b "perl5004delta —perl5.004の新機能"Perl5バージョン12.2のドキュメントperldoc.perl.org。2011年2月27日にオリジナルからアーカイブされました2011年1月8日取得
  33. ^ パトワルダン、ネイサン; Siever、Ellen; スペインアワー、スティーブン(2002)。一言で言えばPerl、第2版オライリーメディアISBN 978-0-596-00241-1
  34. ^ "perl5005delta-perl5.005の新機能"Perl5バージョン12.2のドキュメントperldoc.perl.org。2011年2月3日にオリジナルからアーカイブされました2011年1月21日取得
  35. ^ 「perlhist-Perlの履歴レコード」www.cpan.org。2020年9月16日にオリジナルからアーカイブされました2020年6月2日取得
  36. ^ 「Perlソース」www.cpan.org。2017年6月1日にオリジナルからアーカイブされました2020年6月2日取得
  37. ^ "perl56delta-perlv5.6.0"の新機能Perl5バージョン12.2のドキュメントperldoc.perl.org。2011年2月2日にオリジナルからアーカイブされました2011年1月21日取得
  38. ^ "perl56delta-perlv5.6.xの新機能"Perl5バージョン12.2のドキュメントperldoc.perl.org。2010年11月18日にオリジナルからアーカイブされました2011年1月21日取得
  39. ^ 壁、ラリー。「黙示録1:醜い、悪い、そして良い」2010年11月23日にオリジナルからアーカイブされました2011年1月8日取得
  40. ^ "perl58delta-perlv5.8.0"の新機能Perl5バージョン12.2のドキュメントperldoc.perl.org。2010年11月21日にオリジナルからアーカイブされました2011年1月21日取得
  41. ^ 「パグの計画」オライリーメディア2005年3月3日。2012年9月8日のオリジナルからアーカイブ2011年1月27日取得
  42. ^ 唐、オードリー(2010年4月21日)。「Re:10年でPerl6を実装する方法」PerlMonks2011年5月11日にオリジナルからアーカイブされました2011年1月3日取得
  43. ^ Geoff Broadwell(2005年8月8日)、OSCON 4.4:Ponieの内部、Perl5からPerl6への架け橋、O'Reilly ONLampブログ、2012年3月14日にオリジナルからアーカイブ、 2016年6月27日取得
  44. ^ Jesse Vincent(2006年8月23日)、Ponieは放牧されました、Perl Foundation 、2009年6月27日にオリジナルからアーカイブされ、 2019年1月15日に取得されました
  45. ^ "perl5100delta --perl5.10.0の新機能"Perl5バージョン12.2のドキュメントperldoc.perl.org。2010年12月21日にオリジナルからアーカイブされました2011年1月8日取得
  46. ^ "perlsyn-Perl構文"Perl5バージョン12.2のドキュメントperldoc.perl.org。2013年8月26日にオリジナルからアーカイブされました2011年1月21日取得
  47. ^ a b "perl5120delta-perlv5.12.0の新機能"Perl5バージョン12.2のドキュメントperldoc.perl.org。2011年1月4日にオリジナルからアーカイブされました2011年1月8日取得
  48. ^ "perldelta-perlv5.12.3の新機能"Perl5バージョン12.2のドキュメントperldoc.perl.org。2011年6月8日にオリジナルからアーカイブされました2011年1月8日取得
  49. ^ "perl5140delta --perlv5.14.0の新機能-metacpan.org"metacpan.org2018年7月25日にオリジナルからアーカイブされました2017年7月22日取得
  50. ^ a b "perldelta-perlv5.16.0の新機能"Perl5バージョン16.0のドキュメントmetacpan.org。2020年7月28日にオリジナルからアーカイブされました2012年5月21日取得
  51. ^ 「perl5180delta-perlv5.18.0の新機能-Perlプログラミング言語」Perl5バージョン18.0のドキュメントmetacpan.org。2013年10月29日にオリジナルからアーカイブされました2013年10月27日取得
  52. ^ 「perl5200delta-perlv5.20.0の新機能-Perlプログラミング言語」Perl5バージョン20.0のドキュメントmetacpan.org。2014年5月27日にオリジナルからアーカイブされました2014年5月27日取得
  53. ^ Perlルネッサンスのマイルストーン- 2012年10月27日にWaybackMachineでアーカイブされた最新のPerlプログラミング Modernperlbooks.com。2013年7月17日に取得。
  54. ^ 序文(Modern Perl 2011-2012) 2012年9月28日、 WaybackMachineでアーカイブされました。Modernperlbooks.com。2013年7月17日に取得。
  55. ^ クロマチックによる現代のPerl2011-2012版| Onyx Neon Press は、2011年12月22日、 WaybackMachineでアーカイブされました。Onyxneon.com。2013年7月17日に取得。
  56. ^ 「啓発されたPerl」啓発されたPerl2014年2月5日にオリジナルからアーカイブされました2012年9月28日取得
  57. ^ 「YAPC :: NA2013- 6月3-5日、テキサス州オースティン」Yapcna.org。2013年6月4日。2013年6月22日のオリジナルからアーカイブ2014年4月11日取得
  58. ^ リトル、ステヴァン(2013年2月8日)。「萌えとは(説明)|ステヴァン・リトル」Blogs.perl.org。2013年12月19日にオリジナルからアーカイブされました2014年4月11日取得
  59. ^ 「ポーションのp2」Perl11.org。2004年2月7日。2013年9月24日のオリジナルからアーカイブ2014年4月11日取得
  60. ^ "goccy / gperl路GitHub"GitHub.com。2015年2月23日にオリジナルからアーカイブされました2014年4月11日取得
  61. ^ "rperl"RPerl.org。2014年10月18日にオリジナルからアーカイブされました2014年8月11日取得
  62. ^ a b "Perl7はPerlConference in theCloudで発表されました"perlfoundation.org。2020年6月24日。2020年6月26日のオリジナルからアーカイブ2020年6月24日取得
  63. ^ a b "Perl7の発表"perl.com。2020年6月24日。2020年6月24日のオリジナルからアーカイブ2020年6月24日取得
  64. ^ ニコラスクラーク(2021年5月9日)。「ステアリングカウンシルミーティング#0192021-05-06」www.nntp.perl.org2021年5月18日にオリジナルからアーカイブされました2021年5月17日取得Perl 7のバンプがあるという計画は残っていますが、5.34.0がリリースされた直後ではありません。... [Perl7]で12か月で配信できるとは思いません。 
  65. ^ Perl7dの準備leanpub.com。2020年6月24日。2020年6月25日のオリジナルからアーカイブ2020年6月24日取得
  66. ^ a b Schwartz、Randal L ; フェニックス、トム; フォイ、ブライアン(2007年12月6日)。Perlの学習、第3版ISBN 978-0-596-00132-2
  67. ^ a b "Perlキャメルの使用法と商標情報"オライリーメディア2018年4月25日にオリジナルからアーカイブされました2011年1月9日取得
  68. ^ 「Perl商標」PerlFoundation2011年5月3日にオリジナルからアーカイブされました2011年1月9日取得
  69. ^ ギルモア、ダン(1998年10月25日)。「Perl共和国」シカゴトリビューン2011年4月30日にオリジナルからアーカイブされました2011年1月10日取得
  70. ^ リーデル、セバスチャン(2012年1月18日)。「Perl5ラプター」セバスティアンリーデル2018年6月11日にオリジナルからアーカイブされました2017年11月12日取得
  71. ^ トラウト、マット(2005年6月16日)。「ヴェロキラプトルの状態-フェーズ2」Shadowcat SystemsLimited2017年11月13日にオリジナルからアーカイブされました2017年11月12日取得
  72. ^ ナグパル、DP(2010)。ウェブデザインテクノロジーインド:S。チャンド。p。700. ISBN 978-8121927635
  73. ^ 「タイトル不明」。1997年5月10日。Usenet [email protected] [デッドリンク]
  74. ^ 壁、ラリー。"perl-Perl5言語インタープリター-Perldocブラウザー"perldoc.perl.org 2021年6月24日取得
  75. ^ ウォール、ラリー(1997年3月1日)。「それでアート、汝?」LinuxJournal2010年12月9日にオリジナルからアーカイブされました2011年3月13日取得
  76. ^ 「perlfunc-Perl組み込み関数」Perl5バージョン12.2のドキュメントperldoc.perl.org。2011年1月6日にオリジナルからアーカイブされました2011年1月10日取得
  77. ^ 「Perl6仕様」Perl6プロジェクト。2009年12月2日にオリジナルからアーカイブされました2011年1月27日取得
  78. ^ 「Perl6コンパイラ」Perl6プロジェクト。2009年12月2日にオリジナルからアーカイブされました2011年1月27日取得
  79. ^ ギルモア、WJ(2010)。PHPとMySQLの始まり:初心者からプロフェッショナルまで、第4版押してください。p。 484ISBN 978-1-4302-3114-1
  80. ^ 「IMDbヘルプデスク:サイトの運営に使用しているソフトウェア/ハードウェアは何ですか?」インターネット映画データベース2017年3月9日にオリジナルからアーカイブされました2011年2月12日取得
  81. ^ DuckDuckGoは、1日あたり450万クエリで大量の検索クエリを処理します。https://duckduckgo.com/traffic.html 2012年2月15日、米国議会図書館のWebアーカイブでアーカイブ
  82. ^ DuckDuckGoはPerlを使用しますhttps://web.archive.org/web/20101231135106/http://www.gabrielweinberg.com/blog/2009/03/duck-duck-go-architecture.html
  83. ^ 「PerlFAQ」2019年8月6日にオリジナルからアーカイブされました2019年8月6日取得PerlはDebianで非常に広く使用されています。一部のコア関数はPerlで記述されているだけでなく、名前にperlが含まれている不安定なパッケージが700以上あります(2004年3月)。
  84. ^ 「PerlBooks-Book:Perlによるデータの変更」Perl.org2011年9月7日にオリジナルからアーカイブされました2010年12月30日取得
  85. ^ Perl 5インタープリターの説明は、 Programming Perl、3rd Ed。、Chapter18にあります。特に467ページを参照してください。実行フェーズとコンパイルフェーズを実行時コンパイル時と慎重に区別しています。Perlの「時間」と「フェーズ」はしばしば混同されます。
  86. ^ 「perlguts-PerlAPIの概要-Perldocブラウザ」perldoc.perl.org 2022年1月24日取得
  87. ^ シュワルツ、ランダル「Perlの解析について」2007年9月27日にオリジナルからアーカイブされました2007年1月3日取得
  88. ^ 「Perlジャーナル#19 / 9.26」(PDF)オライリーメディア2011年2月4日取得
  89. ^ ケネディ、アダム(2006)。「PPI—Perlの解析、分析、操作(perlなし)」CPAN2013年9月3日にオリジナルからアーカイブされました2013年9月16日取得
  90. ^ 「ライスの定理」。Perlレビュー4(3):23–29。2008年夏。および「Perlは決定不能です」。Perlレビュー5:7–11。2008年秋。、ジェフリーのケグラーでオンラインで入手できます。「Perlと決定不能性」2009年8月17日にオリジナルからアーカイブされました2009年1月4日取得
  91. ^ Hietaniemi、Jarkko(1998)。「Perlポート(バイナリディストリビューション)」CPAN.org。2006年4月18日にオリジナルからアーカイブされました2006年4月16日取得
  92. ^ 「MacPerlページ」プライムタイムフリーウェア。1997年。 2006年1月18日のオリジナルからアーカイブ2006年1月18日取得
  93. ^ 「Perlポート(バイナリディストリビューション)」CPAN2006年4月18日にオリジナルからアーカイブされました2011年1月27日取得
  94. ^ 「ActivePerlはWindows、Mac、Linux、AIX、HP-UX、Solaris用のPerlです」ActiveStateソフトウェア2016年3月31日にオリジナルからアーカイブされました2011年1月9日取得
  95. ^ 「PPMの使用」ActiveStateソフトウェア2010年8月27日にオリジナルからアーカイブされました2011年1月9日取得
  96. ^ 「さようならPPM、ハローステートツール」activestate.com2019年7月23日。2020年7月28日のオリジナルからアーカイブ2020年4月16日取得
  97. ^ readme.txt
  98. ^ デカルト、ワニ; バンス、ティム(2000)。Perl DBIのプログラミング:[Perlを使用したデータベースプログラミング](1版)。北京[ua]:オライリー。ISBN 978-1-56592-699-8
  99. ^ 「Perlプログラミング-プログラミング言語の原則」sites.google.com 2021年5月18日取得
  100. ^ バンス、ティム; デカルト、ワニ(2000年2月4日)。Perl DBIのプログラミング:Perlを使用したデータベースプログラミング「O'ReillyMedia、Inc。」。ISBN 978-1-4493-1536-8
  101. ^ Bekman、Stas。「mod_perlでのデータベースの効率的な作業」2007年8月22日にオリジナルからアーカイブされました2007年9月1日取得
  102. ^ Pachev、Sasha(2007年4月10日)。MySQLの内部を理解する:優れたデータベースの発見と改善「O'ReillyMedia、Inc。」。ISBN 978-0-596-55280-0
  103. ^ "Class :: DBI-単純なデータベースの抽象化-metacpan.org"metacpan.org2020年8月6日にオリジナルからアーカイブされました2020年4月8日取得
  104. ^ "Rose :: DB :: Object-拡張可能で高性能なオブジェクトリレーショナルマッパー(ORM)。-metacpan.org"metacpan.org2020年8月6日にオリジナルからアーカイブされました2020年4月8日取得
  105. ^ 「Tsqlクエリ開発者リファレンス」pdfpremiumfree.com 2021年5月18日取得
  106. ^ 「Alioth:コンピュータ言語ベンチマークゲーム:プロジェクト情報」Alioth2013年3月25日にオリジナルからアーカイブされました2011年1月13日取得
  107. ^ 「どのプログラムが最速ですか?」コンピュータ言語ベンチマークゲームAlioth2013年5月17日にオリジナルからアーカイブされました2011年1月13日取得
  108. ^ Leroy、Jean-Louis(2005年12月1日)。「タイムリーなスタート」オライリー。2006年6月13日にオリジナルからアーカイブされました2006年5月22日取得
  109. ^ Beattie、Malcolm&Enache Adrian(2003)。"B :: BytecodePerlコンパイラのバイトコードバックエンド"CPAN2021年3月30日にオリジナルからアーカイブされました2013年9月16日取得
  110. ^ シュワルツ、ランダル; フォイ、ブライアン; フェニックス、トム(2011年6月23日)。Perlの学習「O'ReillyMedia、Inc。」。ISBN 978-1-4493-0358-7
  111. ^ スタイン、リンカーン; MacEachern、ダグ(1999)。PerlとCを使用したApacheモジュールの作成:ApacheAPIとMod_perl「O'ReillyMedia、Inc。」。ISBN 978-1-56592-567-0
  112. ^ Bekman、Stas; ショレ、エリック(2003)。実用的なMod_perl「O'ReillyMedia、Inc。」。ISBN 978-0-596-00227-5
  113. ^ インガーソン、ブライアン。「インライン-metacpan.org」CPAN2013年6月13日にオリジナルからアーカイブされました2011年1月26日取得
  114. ^ 「Perl5.12.0がリリースされました-アップデート」ハイスメディアUK。2010年4月13日。2010年4月19日のオリジナルからアーカイブ2011年1月8日取得
  115. ^ 「perl5.16.1がリリースされました!」2012年8月9日。2012年12月2日のオリジナルからアーカイブ2012年8月26日取得
  116. ^ 「止められないPerlリリーストレイン?」LWN.net。2012年2月29日。2016年8月22日のオリジナルからアーカイブ2012年3月28日取得
  117. ^ TIOBEソフトウェアインデックス(2020)。「TIOBEプログラミングコミュニティインデックスPerl」2018年2月25日にオリジナルからアーカイブされました2020年2月6日取得
  118. ^ 「Perl6」Perl6プロジェクト。2011年2月21日にオリジナルからアーカイブされました2011年2月27日取得
  119. ^ トーキントン、ネイサン。「ラリーの話の転写」nntp.perl.org。2011年5月1日にオリジナルからアーカイブされました2011年1月25日取得
  120. ^ 「Perl6-Perlの未来」www.java-samples.com 2021年5月18日取得
  121. ^ 「公式Perl6ドキュメント」Perl6プロジェクト。2009年8月31日にオリジナルからアーカイブされました2011年1月25日取得
  122. ^ Kuhn、Bradley(2001年1月)。「PerlをJava仮想マシンに移植する際の考慮事項」シンシナティ大学。2008年3月21日にオリジナルからアーカイブされました2008年6月28日取得 {{cite journal}}: Cite journal requires |journal= (help)
  123. ^ クロマチック(2015)。現代のPerl実用的な本棚。ISBN 978-1-68050-088-2
  124. ^ 「Perl6コンパイラの機能比較」2017年8月11日にオリジナルからアーカイブされました2012年3月28日取得
  125. ^ ワージントン、ジョナサン(2013年7月15日)。「RakudoJVMニュース:より多くのテストに加えて、スレッドとプロミスのプロトタイプ」6ガッツ2013年10月5日にオリジナルからアーカイブされました2013年7月24日取得
  126. ^ ワージントン、ジョナサン(2013年5月31日)。「MoarVM:NQPとRakudo用の仮想マシン」6ガッツ2013年7月9日にオリジナルからアーカイブされました2013年7月24日取得
  127. ^ "rename-lwn"2019年10月17日にオリジナルからアーカイブされました2019年11月10日取得
  128. ^ 「rakudo / rakudo-GitHub」GitHub.com。2017年7月29日にオリジナルからアーカイブされました2013年9月21日取得
  129. ^ ウォール、ラリー(2014年5月22日)。「PerlCulture(別名、タマネギの最初の州)」2014年5月22日にオリジナルからアーカイブされました2014年5月22日取得
  130. ^ ラリーウォール。「タマネギの第二の状態」2012年7月17日にオリジナルからアーカイブされました2012年10月12日取得(「教会」を検索)
  131. ^ ランダルL.シュワルツ(1999年5月2日)。「もう一人のPerlハッカーは誰ですか?」ニュースグループ:  comp.lang.perl.miscUsenet:[email protected]2012年7月8日にオリジナルからアーカイブされました2014年12月5日取得 
  132. ^ Schwartz、Randal(2005年3月31日)。「カノニカルJAPH」PerlMonks2011年7月22日にオリジナルからアーカイブされました2011年5月16日取得
  133. ^ グレッグベーコン(1999年5月28日)。「Re:スライス内の値をインクリメントする」ニュースグループ:  comp.lang.perl.miscUsenet:7imnti $ mjh [email protected]2011年7月7日にオリジナルからアーカイブされました2011年7月12日取得 
  134. ^ 戻る、アダム。「Perlの5行のRSA」2011年1月19日にオリジナルからアーカイブされました2011年1月10日取得
  135. ^ 「コードゴルフ:コードゴルフとは何ですか?」29度。2007年。 2012年1月13日のオリジナルからアーカイブ2018年11月26日取得
  136. ^ Gallo、Felix(2003)。「第0回難読化Perlコンテスト」(PDF)ジョン・オルワント(編)。ゲーム、流用、およびPerl文化:Perlジャーナルの最高オライリーメディア。2009年11月22日にオリジナル(PDF)からアーカイブされました2011年1月12日取得
  137. ^ 「Perl詩」PerlMonks2007年9月27日にオリジナルからアーカイブされました2011年1月27日取得
  138. ^ コンウェイ、ダミアン。"Lingua :: Romana :: Perligata--XXIのためのPerl-imumCentury"2007年9月30日にオリジナルからアーカイブされました2006年6月15日取得
  139. ^ Brocard、Leon(2014年5月22日)。"Perlを使用; Journal ofacme"GrnLight.net。2014年5月22日にオリジナルからアーカイブされました。
  140. ^ 「開発者アップデート」。ドブ博士の開発者向けアップデートミラー-フリーマン。21995年。
  141. ^ a b Schwartz、Randal L.(1993)。Perlの学習オライリー&アソシエイツ。Bibcode1993lepe.book ..... S。
  142. ^ 「perlintro」Perl5バージョン18.0のドキュメントPerl5ポーターとperldoc.perl.org。2011年1月9日にオリジナルからアーカイブされました2013年6月30日取得
  143. ^ 「perlstyle」Perl5バージョン18.0のドキュメントPerl5ポーターとperldoc.perl.org。2013年6月26日にオリジナルからアーカイブされました2013年6月30日取得
  144. ^ a b "Perl 6FAQ"Perl6プロジェクト。2013年7月1日にオリジナルからアーカイブされました2013年6月30日取得
  145. ^ a b クロマチック(2012年12月31日)。「Perl5とPerl6の実装」2013年7月29日にオリジナルからアーカイブされました2013年6月30日取得

さらに読む

  • Perl 6th Edition(2011)、O'Reillyを学びます。Perlの初心者レベルの紹介。
  • Perl 1st Edition(2012)以降、Wrox。プログラミングの初心者またはPerlの初心者向けの初心者向けチュートリアル。
  • 現代のPerl は、2011年12月22日、Wayback Machine 2nd Edition(2012)、OnyxNeonでアーカイブされました。最新のPerlプログラミング手法について説明します。
  • プログラミングPerl4th Edition(2012)、O'Reilly。決定的なPerlリファレンス。
  • 効果的なPerlプログラミング第2版(2010)、Addison-Wesley。慣用的なPerlを書くための中級から上級レベルのガイド。
  • Perlクックブック ISBN0-596-00313-7実用的なPerlプログラミングの例。 
  • ドミナス、マークジェイソン(2005)。高次Perlモーガンカウフマン。ISBN 978-1-55860-701-9Perlの関数型プログラミング手法。

外部リンク