Perl
歴史

| バージョン | 公開日 | 内容 |
| --- | --- | --- |
| 1.0 | 1987年12月18日 |  6台の VAX 機と6台の Sun 機のためのコンフィギュレーション管理制御システムのレポート作成ツールとして誕生した。 |
| 2.0 | 1988年6月05日 |  ヘンリー・スペンサー作の美しい正規表現ライブラリを Perl 風にアレンジし、導入した。 |
| 3.0 | 1989年10月18日 |  バイナリデータを処理できるようになった。 |
| 4.0 | 1991年3月21日 |  O'Reilly&Associates, Inc. より Programming perl が発売されたのに合わせて公開された。 |
| 5.0 | 1994年10月17日 |  レキシカル変数 my の導入  リファレンスおよびオブジェクト指向に対応。  useが導入され追加モジュールの取扱いが大幅に強化された。  strictプラグマの導入 |
| 5.5.0 | 1998年7月22日 |  正規表現の拡張、B::*モジュールによるフックのサポート、qr// 正規表現演算子の追加がなされた。  BeOS を含む幅広いオペレーティングシステムに移植された。  日本語圏で最も重要なことは、このバージョンが JPerl がサポートする最後のバージョンということである。したがって、日本語情報処理において2022年においてもなお、バージョン 5.005_03 は利用されている。 |
| 5.6.0 | 2000年5月22日 |  our文やウィークリファレンス、warningsプラグマの導入など、言語コアが大きく拡張された。  試験的ながら Unicode のサポートを開始した最初のバージョン。  バージョン番号の構造を変更。サブバージョン（5.6.0の6に相当）が偶数のものが安定版、奇数のものが開発版を意味する。 |
| 5.8.0 | 2002年7月18日 |  5.8系列の最新版は5.8.9（2008年12月14日）。  汎用文字エンコーディング操作モジュール Encode が標準ライブラリに加えられ、Unicodeおよび Shift_JIS などの様々な文字エンコーディングに正式に対応した。  スレッドやPerlIOレイヤが導入された。 |
| 5.10.0 | 2007年12月18日 |  公開日は Perl 1.0 の公開からちょうど20年目にあたる。  静的変数を宣言する state 文や、switch文に相当する given 文、say などの言語拡張が導入された。  新しいキーワードの導入による互換性の問題に対処するため、新しいキーワードの導入を feature プラグマで制御できるようになった。 |
| 5.12.0 | 2010年4月13日 |  package のバージョン指定構文や未実装部分を表す...演算子（ヤダヤダ演算子）、後置の when 修飾子などが導入された。  日付と時刻に関するコアモジュールが2038年問題に対応した。 |
| 5.14.0 | 2011年5月14日 |  Unicode 6.0 にほぼ完全に対応。  IPv6サポートの改善。  push、pop、unshift、shift、each、keys、values などの配列やハッシュを受け取る関数が、リファレンスを受け取ることができるようになった。  package パッケージ名 { ... }構文の追加。  値を破壊せずに戻り値として返す正規表現オプションrが追加。 |
| 5.16.0 | 2012年5月20日 |  use バージョン番号文の動作が変更された。以前はスクリプトの実行に必要なPerlのバージョンを示すものだったが、「指定したバージョンよりも新しいバージョンの Perl で新たに実装された機能を無効化する」という動作になった。  __SUB__は現在実行中のサブルーチンに対する参照を返す。  feature プラグマでunicode_evalを有効にすると、文字列に対する eval は常に文字列を Unicode として扱う。またevalbytesを有効にすると、引数をバイト列として評価するevalbytes関数が利用できる。  substr は、左辺値もしくは潜在的に左辺値とみられるコンテキストで2つもしくは3つの引数付きで呼び出された場合、第一引数を変更する特殊な左辺値スカラを返す。  Unicode 6.1 対応も強化された。  デバッガ、CORE名前空間、XSインターフェイスなどでさまざまな機能強化が加わっている。 |
| 5.18.0 | 2013年5月18日 |  実験的機能を利用するための新しい警告カテゴリexperimental::feature_nameが追加され、Perl 5.10 で加わったスマートマッチ演算子、レキシカルな$_がそのカテゴリに変更された。  ハッシュの際に使われるシードがランダム化され、keys や values、each といったハッシュを利用する関数が返すキー／値の並び順が実行毎に異なるようになった。  Unicode 6.2 への対応、新しいDTraceプローブの追加、実験的機能としてレキシカルサブルーチンの追加などが行われた。\N{...}表現の扱いがいくつか変わっているほか、垂直タブがホワイトスペースとして扱われなくなっている点など、文字の扱いについていくつかの変更が加わった。  encoding、CPANPLUS、Log::Message、Log::Message::Config、Log::Message::Handlers、Log::Message::Item、Log::Message::Simple、Object::Accessorなどが廃止予定のモジュールとなった。 |
| 5.20.0 | 2014年5月27日 |  実験的機能としてuse feature 'signature'によるサブルーチンシグネチャ、use feature 'postderef'によるPostfix Dereferencingと呼ばれる機能が追加された。Postfix Dereferencingを利用すると、いままで${ $sref } のように表記していたものが$sref->$* のように表記できるようになる。  新たなスライス表記として、キーと値のペアを戻す%hash{…}と%array[…]というスライス表記が加わった。  subキーワードのprototype属性がサポートされ、プロトタイプパーシングの一貫性も強化された。  64ビットプラットフォーム対応が改善され、Perl配列が2**31以上の要素を保持できるようになった。  正規表現エンジンは2**31以上の文字列に対応できるようになった。  Unicode 6.3 に対応した。  コアモジュールとしてIO::Socket::IPが追加された。  rand関数の仕様が変更された。  一部のコマンドラインオプションの挙動が変更された。 |
| 5.22.0 | 2015年6月1日 |  ビット単位の演算子が導入された。  ダブルダイアモンド演算子が導入された。  正規表現の\bバウンダリの機能が強化された。  正規表現のキャプチャしない修飾子が追加された。  use re 'strict'がサポートされた。  Unicode 7.0がサポートされた。  POSIX 2008のロケール、通貨がサポートされた。  古いプラットフォーム上のUTF-8判定が改善された。  リファレンスのエイリアスがサポートされた。  引数なしのプロトタイプがサポートされた。  サブルーチンのconstアトリビュートがサポートされた。  filenoにディレクトリハンドルも指定可能になった。  Win32でリスト形式のパイプオープンが可能になった。  リスト代入の繰返し指定が可能になった。  InfとNanの扱いが強化された。  浮動小数点数の扱いが強化された。  InfとNaNの文字列化は致命的エラーになった。  実験的なCバックトレースAPIがサポートされた。 |
| 5.24.0 | 2016年5月9日 |  サブルーチンと数値計算が高速化された。  Unicode 8.0 がサポートされた。  実験的な扱いだった前方デリファレンスが本格サポートされた。 |
| 5.26.0 | 2017年5月30日 |  Unicode 9.0 がサポートされた。  セキュリティ対策として特殊変数 @INC は、デフォルトではカレントディレクトリ "." を含まなくなった。  実験的な扱いだったレキシカルサブルーチンが本格サポートされた。  インデントされたヒヤドキュメントがサポートされた。  新しい正規表現修飾子 /xx がサポートされた。  正規表現の特殊変数として @{^CAPTURE}、 %{^CAPTURE}、%{^CAPTURE_ALL} が追加された。  OS側で対応していれば、UTF-8 ロケールでデフォルトの照合を使えるようになった。 |
| 5.28.0 | 2018年6月22日 |  Unicode 10.0 がサポートされた。  delete 関数がキー/値のハッシュスライスに使えるようになった。  実験的機能として、正規表現アサートの英字名が利用可能になった。  実験的機能として、Unicode 用字の混合が検出できるようになった。  perl -i によるインプレース編集がより安全になった。  state 宣言された配列変数、ハッシュ変数が初期化できるようになった。  OSが扱うiノード番号をフルサイズで扱えるようになった。  sprintf 関数のフォーマットサイズ修飾子 %j は C99以前のコンパイラでも使用できるようになった。  Close-on-exec フラグはアトミックに設定されるようになった。  文字列および数値のビット演算子は実験的ではなくなった。  OSがロケールに対応している場合、スレッド環境でもロケールを自由に使用・変更できるようになった。  特殊変数 ${^SAFE_LOCALES} が追加された。  多数のセキュリティ上の修正が行われた。 |
| 5.30.0 | 2019年5月22日 |  Unicode 12.1をサポート。 |
| 5.32.0 | 2020年6月20日 |  演算子 isa をサポート。 |
| 5.34.0 | 2021年5月20日 |  実験的機能としてuse feature 'try'によるtry/catch構文が追加された。  正規表現の繰り返し構文 qr/{,n}/において下限の省略が可能になった。  これまでは正規表現の中括弧の中にスペースを含むことができなかったが、\x{ FFFC }のようにスペースを含むことが可能になった。  0odddddのような8進数表記が可能になった。 |
| 5.36.0 | 2022年5月28日 |  Unicode 14.0 に対応した。  use v5.36 の記述により Perl7 で提案されていた機能の大部分がサポートされた。  コマンドラインフラグ -g が導入された。  正規表現の拡張ブラケット文字クラスは実験的とは見なされなくなった。  正規表現の可変長の後読みは、ほとんど実験的とは見なされなくなった。  浮動小数点例外のシグナル SIGFPE が遅延しなくなった。  ブール値 true/false がサポートされた。  実験的機能として、for ループの1回の処理で複数の値を扱えるようになった。  実験的機能として、組み込み関数が追加された。  実験的機能として、defer ブロックがサポートされた。  実験的機能として、try/catch 構文に finally ブロックが利用できるようになった。  実験的機能として、Unicode による対になるデリミタが多数サポートされた。  サブルーチンシグネチャ付きのサブルーチンの @_ は実験的になった。 |
| 5.38.0 | 2023年7月02日 |  class構文が追加された。  Unicode 15.0 に対応した。  非推奨の警告には特定のサブカテゴリが追加された。  %{^HOOK} APIが導入された。  PERL_RAND_SEED  シグネチャでのDefined-orおよびlogical-or代入のデフォルト式がサポートされた。  @INCフックの強化と$INCおよびINCDIR  deferまたはfinallyブロックからの制御フローがコンパイル時に検出されるようになった。  パターン内での楽観的な評価  REG_INFが65,536から2,147,483,647に引き上げられた。  新しいAPI関数optimize_optreeおよびfinalize_optreeが追加された。  一部のgoto文がdeferおよびfinallyブロックで許可されるようになった。  新しい正規表現変数${^LAST_SUCCESSFUL_PATTERN}が追加された。  参加プラットフォームでLocaleカテゴリLC_NAMEがサポートされるようになった。 |
| 5.40.0 | 2024年6月9日 |  定数式のコンパイル時畳み込みが拡張された。  新しい警告とエラーチェック機能が追加され、静的解析と実行時チェックが強化された。  マルチディスパッチのサポートが改善され、複数のシグネチャを持つ関数やメソッドの定義が容易になった。  JSON::PPやCPAN::Meta::YAMLなど、コアモジュールが最新バージョンにアップデートされた。  %{^HOOK} の強化により、フックの使用が柔軟になった。  Perlの内部構造が最適化され、特に大規模なデータ操作や複雑な正規表現のパフォーマンスが向上した。  新しいAPI関数optimize_optreeとfinalize_optreeが追加され、コンパイラの最適化が強化された。  正規表現関連でREG_INFの値が2,147,483,647まで引き上げられた。  Perlの一部プラットフォームで、LocaleカテゴリのLC_ADDRESSがサポートされた。 |