英語フランス語スペイン語

OnWorksファビコン

perl581delta-クラウドでのオンライン

Ubuntu Online、Fedora Online、Windowsオンラインエミュレーター、またはMACOSオンラインエミュレーターを介してOnWorks無料ホスティングプロバイダーでperl581deltaを実行します

これは、Ubuntu Online、Fedora Online、Windowsオンラインエミュレーター、MACOSオンラインエミュレーターなどの複数の無料オンラインワークステーションの581つを使用してOnWorks無料ホスティングプロバイダーで実行できるコマンドperlXNUMXdeltaです。

プログラム:

NAME


perl581delta-perlv5.8.1の新機能

DESCRIPTION


このドキュメントでは、5.8.0リリースと5.8.1リリースの違いについて説明します。

5.6.1 などの以前のリリースからアップグレードする場合は、まず perl58delta を読んでください。
5.6.0と5.8.0の違いを説明しています。

5.6.1 について疑問に思っている方のために付け加えておきますと、バグ修正の点では XNUMX とまったく同じでした。
開発リリース 5.7.1。 混乱した? このタイムラインが少しでも役立つことを願っています。
新しいメジャー リリース、そのメンテナンス リリース、および開発リリース。

新規保守開発

5.6.0 2000 年 22 月 XNUMX 日
5.7.0 2000 年 02 月 XNUMX 日
5.6.1 2001 年 08 月 XNUMX 日
5.7.1 2001 年 09 月 XNUMX 日
5.7.2 2001 年 13 月 XNUMX 日
5.7.3 2002 年 05 月 XNUMX 日
5.8.0 2002 年 18 月 XNUMX 日
5.8.1 2003 年 25 月 XNUMX 日

互換性がない 変更


ハッシュ ランダム化
主にセキュリティ上の理由により、ハッシュの「ランダムな順序」がさらに強化されました。
ランダム。 以前は、ハッシュ要素の順序は keys(), 値(), 各() ました
基本的にランダムですが、それでも再現可能でした。 ただし、現在では順序が異なります。
Perl のさまざまな実行。

パール 持っています 決して 保証 どれか 発注 of   ハッシュ キー、注文はすでに完了しています
Perl 5 の存続期間中に何度か変更されました。また、ハッシュ キーの順序も変更されました。
これまでも、そしてこれからも広告掲載オーダーの影響を受け続けます。

追加されたランダム性はアプリケーションに影響を与える可能性があります。

考えられるシナリオの XNUMX つは、アプリケーションの出力にハッシュ データが含まれている場合です。 のために
たとえば、Data::Dumper モジュールを使用してデータを別のファイルにダンプした場合、
次に、ファイルを比較してデータが変更されたかどうかを確認すると、 false が得られます。
ハッシュがダンプされる順序は変わるため、ポジティブです。 一般的に治療法としては、
キー (または値) を並べ替えます。 特に Data::Dumper で「ソートキー」を使用する場合
オプション。 特定の順序が本当に重要な場合は、結合されたハッシュを使用します。
Tie::IxHash モジュールは、デフォルトでハッシュ要素の順序を保持します。
追加された。

さらに微妙な問題は、「地球規模の破壊」の命令に依存していることである。 それが何です
実行の最後に発生します。Perl は、ユーザー データを含むすべてのデータ構造を破壊します。
デストラクター (DESTROY サブルーチン) が、
地球規模の破壊、この先に問題が起こるかもしれません。 たとえば、あるデストラクタでは、
オブジェクトは、次のことをしない限り、他のクラスのオブジェクトがまだ利用可能であるとは想定できません。
それらへの参照を保持します。 環境変数 PERL_DESTRUCT_LEVEL が
ゼロ以外の値、または Perl が生成されたスレッドを終了している場合、通常のスレッドも破壊されます。
使用されなくなったリファレンスとシンボル テーブル。 クラスメソッドを呼び出すことはできません
または、そのように収集されたクラスの通常の関数。

ハッシュのランダム化により、特定の事柄に関する隠れた仮定が明らかになるのは確実です。
ハッシュ要素の順序付け、および完全なバグ: Perl コアのいくつかのバグが明らかになりました。
コアモジュール。

実行時のハッシュのランダム化を無効にするには、環境変数 PERL_HASH_SEED を設定します。
Perl を実行する前に 0 (ゼロ) に設定します (詳細については、perlrun の「PERL_HASH_SEED」を参照してください)、または
コンパイル時にこの機能を完全に無効にするには、「-DNO_HASH_SEED」を指定してコンパイルします (「
INSTALL).

この背後にある本来の理論的根拠については、perlsec の「Algorithmic Complexity Attacks」を参照してください。
変更します。

UTF-8 On ファイルハンドル いいえ より長いです 活性化しました By ロケール
Perl 5.8.0 では、標準ファイルハンドルを含むすべてのファイルハンドルは暗黙的に次のように設定されていました。
ロケール設定で UTF-8 の使用が示されている場合は、Unicode UTF-8 である必要があります。 この機能
あまりにも多くの問題が発生したため、この機能はオフになり、再設計されました。「コア」を参照してください。
機能強化」。

単一の数字 v-文字列   いいえ より長いです v-文字列 「=>」
バージョン文字列または v-strings (perldata の「バージョン文字列」を参照) 機能は、
Perl 5.6.0 は、特にユーザーがそれを望まない場合に、いくつかの混乱の原因となってきました。
それを使用しましたが、Perl はそれをよく知っていると考えました。 特に厄介なのが、
「=>」の前のバージョン文字列 (「v」の後に数字が続く) は、
文字列リテラルの代わりに v-string を使用します。 言い換えると:

%h = ( v65 => 42 );

Perl 5.6.0 以降を意味します

%h = ( 'A' => 42 );

(少なくとも ASCII 子孫のプラットフォームでは) Perl 5.8.1 はより自然な状態を復元します。
解釈

%h = ( 'v65' => 42 );

v65.66 や 65.66.67 のような複数番号の v-string は、Perl でも引き続き v-string です。
5.8.

(Win32) この -C スイッチ ています 行った 転用
-C スイッチが互換性のない方法で変更されました。 このスイッチのみの古いセマンティクス
これは Win32 および 8.x リリースの「utf5.6 を使用する」ユニバースでのみ意味があり、作成しません。
5.8.0 の Unicode 実装に適しています。 このスイッチは使えなかったので
誰かによって、それは再利用されました。 このスイッチが 5.6.x で有効になった動作
将来のリリースでは、透過的かつデータ依存の方法でリリースがサポートされる可能性があります。

このスイッチの新しい機能については、「UTF-8 ロケールでは UTF-8 がデフォルトではなくなりました」を参照してください。
perlrun の「-C」。

(Win32) この /d スイッチ Of cmd.exeを
Perl 5.8.1 は、cmd.exe シェルを内部で実行するときに /d スイッチを使用します。 システム(),
バックティック、および外部プログラムへのパイプを開くとき。 追加のスイッチにより、
レジストリからの AutoRun コマンドの実行。これは一般に望ましくないと考えられています。
外部プログラムを実行するとき。 古いバージョンとの互換性を維持したい場合
動作を確認するには、環境内の PERL5SHELL を「cmd /x/c」に設定します。

基本 機能強化


UTF-8 いいえ より長いです デフォルト UTF-8 ローカル
Perl 5.8.0 では、多くの Unicode 機能が導入されました。 そのうちのXNUMXつは、より多くのものであることが判明しました
利益よりも迷惑: ファイルハンドルの自動的な (そしてサイレントな) 「UTF-8 化」
ユーザーのロケール設定で UTF-8 の使用が示されている場合は、標準のファイルハンドルが含まれます。

たとえば、ロケールとして「en_US.UTF-8」を指定した場合、STDIN と STDOUT は次のようになります。
自動的に「UTF-8」、つまり暗黙的な binmode(..., ":utf8") が作成されました。 これ
つまり、印刷しようとしているとします。 CHR(0xff)、最終的にバイト 0xc3 0xbf を出力しました。 しそうにない
Perl 5.8.0 のこの機能を知らなかったら、あなたは何を考えていたでしょうか。 問題は
大多数の人はそうではありませんでした。たとえば、RedHat リリース 8 と 9 では、
デフォルト ロケール設定は UTF-8 であるため、すべての RedHat ユーザーは UTF-8 ファイルハンドルを取得します。
それが欲しかったかどうか。 Perl 5.8.0 の Unicode 実装により、この問題はさらに深刻になりました。
(まだ) 厄介なバグがあり、特に s/// と tr// の使用に関連しています。/. (バグ
5.8.1で修正されました)

したがって、この機能を撤回し、暗黙的なサイレントから変更することが決定されました。
デフォルトは明示的意識オプションです。 新しい Perl コマンド ライン オプション「-C」とその
対応する環境変数 PERL_UNICODE を使用して、Perl と
Unicode は、I/O やコマンド ライン引数などのインターフェイスで対話します。 見る
詳細については、perlrun の「-C」および perlrun の「PERL_UNICODE」を参照してください。

安全でない 信号 再び 利用できます
Perl 5.8.0 では、いわゆる「安全なシグナル」が導入されました。 これは、Perl が「いいえ」ということを意味します。
信号を即座に処理するようになりましたが、安全な場合は「オペコード間」で処理されるようになりました。
それで。 以前の即時処理は Perl の内部状態を簡単に破損する可能性があります。
謎のクラッシュが発生します。

しかし、より安全な新しいモデルにも問題があります。 なぜなら、今はオペコード、つまり、
Perl の実行は中断されることはなく、完了するまで実行されます。
長い時間がかかる可能性のある操作が、今では実際に長い時間がかかるようになりました。 たとえば、ある種の
ネットワーク操作には独自のブロッキングおよびタイムアウトのメカニズムがあり、
すぐに中断するのが良いでしょう。

したがって、Perl 5.8.1 では、5.8.0 以前 (実際には 5.7.3 以前) を復元するための「バックドア」が導入されています。
信号の動作。 環境変数 PERL_SIGNALS を「安全でない」に設定するだけです。
即時の (安全でない) 信号処理動作が戻ります。 perlrun の「PERL_SIGNALS」を参照してください。
perlipc の「遅延シグナル (安全なシグナル)」。

まったく関係のないニュースですが、POSIX::SigAction で安全なシグナルを使用できるようになりました。 見る
POSIXでは「POSIX::SigAction」。

タイド 配列   配列 索引
以前は、「FETCH」、「STORE」、「EXISTS」、および「DELETE」メソッドに渡されるインデックスは関連付けられていました。
配列クラスは常に負ではありませんでした。 実際の引数が負の場合、Perl は次のようにします。
暗黙的に FETCHSIZE を呼び出し、結果をインデックスに追加してから、結果を
タイドアレイ方式。 この動作はオプションになりました。 結合された配列クラスに
$NEGATIVE_INDICES という名前のパッケージ変数。真の値または負の値に設定されます。
変更されずに「FETCH」、「STORE」、「EXISTS」、および「DELETE」に渡されます。

ローカル ${$x}
構文

ローカル$ {$ x}
ローカル @{$x}
ローカル %{$x}

$x が有効な変数名である場合、変数をローカライズします。

Unicode 文字 データベース 4.0.0
Perl5.8に含まれているUnicode文字データベースのコピーが4.0.0に更新されました
3.2.0から。 これは、たとえば、Unicode 文字のプロパティが次のとおりであることを意味します。
ユニコード4.0.0。

推奨されない 警告
非推奨となる新機能が 5.8.0 つあります。 Perl XNUMX はいくつかの非推奨の警告を追加するのを忘れていました。
これらの警告が追加されました。 最後に、差し迫った機能の削除についてお知らせします。

(リマインダー) 疑似ハッシュ   非推奨の (本当)

擬似ハッシュは Perl 5.8.0 で非推奨となり、Perl 5.10.0 で削除される予定です。 を参照してください。
詳細については、perl58delta を参照してください。 疑似ハッシュにアクセスしようとするたびに警告がトリガーされます
「疑似ハッシュは非推奨です」。 本当に疑似ハッシュを使用し続けたい場合は、
非推奨の警告を表示しないようにするには、次を使用します。

「非推奨」という警告はありません。

または、fields プラグマを引き続き使用することもできますが、データ構造は期待しないでください。
もはや疑似ハッシュではありません。

(リマインダー) 5.005スタイル スレッド   非推奨の (本当)

5.005 スタイルのスレッド (「use Thread;」によってアクティブ化される) は Perl 5.8.0 で非推奨となり、今後
Perl 5.8 以降は削除されました。詳細については、perl58delta を参照してください。 5.005系各スレッド作成
「5.005 スレッドは非推奨です」という警告が表示されます。 本当に続けたいなら
5.005 スレッドを使用しているが、非推奨の警告が表示されないようにするには、次を使用します。

「非推奨」という警告はありません。

(リマインダー) この $* 変数 is 非推奨の (本当)

複数行のマッチングを制御する $* 変数は非推奨となり、削除されます。
5.8以降。 この変数は長い間非推奨になっており、非推奨の警告が表示されます
「$* の使用は非推奨です」と表示されますが、変数は最終的に削除されます。 の
この機能は、パターン マッチングの「/s」および「/m」修飾子に置き換えられました。 もし
本当に $* 変数を使い続けたいが、非推奨の警告は表示したくない場合、
使用します。

「非推奨」という警告はありません。

その他 機能強化
void コンテキストの「map」はもう高価ではありません。 「map」はコンテキストを認識するようになりましたが、今後もコンテキストを認識しません。
void コンテキストで呼び出された場合はリストを構築します。

ソケットへの印刷中にサーバーによってソケットが閉じられた場合、クライアントは SIGPIPE を取得するようになりました。
この新機能は計画されていませんでしたが、PerlIO の変更から自然に取り込まれたものであり、
偶然の特徴とみなされます。

PerlIO::get_layers(FH) は、ファイルハンドルでアクティブな PerlIO レイヤーの名前を返します。

PerlIO::via レイヤーには、レイヤーが
ストリームを「auto-:utf8」にしたいと考えています。

utf8::is_utf8() スカラーがエンコードされているかどうかをテストする簡単な方法として追加されました
内部的には UTF-8 (Unicode) です。

モジュール および プラグマタ


更新中 モジュール プラグマタ
次のモジュールとプラグマは Perl 5.8.0 以降更新されました。

ベース
B::バイトコード
以前よりもはるかに良い状態になりました。 まだ完璧には程遠いですが、試す価値はあるかもしれません
試してください。

B ::簡潔
B ::デパース
ベンチマーク
オプション機能「:hireswall Clock」により、高解像度の壁時計が可能になりました
回 (Time::HiRes を使用)。

バイトローダー
「B::バイトコード」を参照してください。

バイト
bytes::substr が追加されました。

CGI
キャラネーム
カスタム キャラクター名のエイリアスを持つことができるようになりました。

CPAN
CPAN.pm モジュールに次のシンプルなコマンド ライン フロントエンドが追加されました。 パン.

データ::ダンパー
新しいオプションのペアでは、ハッシュ キーと値の間の区切り文字を選択できます。

DB_ファイル
Devel :: PPPort
ダイジェスト::MD5
エンコード
エンコードプラグマ機能の大幅な更新 (tr/// および DATA
ファイルハンドル、フォーマット)。

ファイルハンドルがエンコーディングを持つものとしてマークされている場合、マップできない文字は
後で (破損したデータが使用されているとき) ではなく、入力中にすでに検出されています。

ISO 8859-6 変換テーブルが修正されました (0x30..0x39 が誤ってマッピングされました)
U+0660..U+0669 ではなく U+0030..U+0039)。 GSM 03.38 変換は行われませんでした。
エスケープシーケンスを正しく処理します。 UTF-7エンコードが追加されました(エンコードを作成)
Unicode::String を備えた機能を備えています)。

フィールド
リブネット
Math :: BigInt
Perl v1.60 に含まれるバージョンである v5.8.0 以降、多くのバグが修正されました。
特に注目すべきは、一部の人にとって div と mod が失敗する原因となった Calc のバグです。
大きな値と不正な入力の処理が修正されました。

いくつかの新機能が追加されました。 broot() メソッドにパラメータを渡すことができるようになりました
config() 実行時に一部の設定を変更し、トラップできるようになりました。
NaN と無限の作成。

いつものように、いくつかの最適化が行われ、全体的な計算が少し速くなりました。 で
場合によっては、実際にはかなり高速になります。 特に次のような代替ライブラリ
Math::BigInt::GMP はこれによる恩恵を受けます。 さらに、非常に不格好なルーチンの多くは、
ような fsqrt() および フロッグ() はるかに高速になりました。

MIME :: Base64
次の
ダイヤモンドの継承が機能するようになりました。

Net :: Ping
PerlIO :: scalar
非文字列スカラー (特殊変数など、perlvar を参照) からの読み取りが機能するようになりました。

ポドレーター
Pod :: LaTeX
ポッドパーサー
ポッド:: Perldoc
完全に書き換えます。 副作用として、root で実行しても起動を拒否しなくなりました。

Scalar :: Util
新しいユーティリティ: refaddr、isvstring、look_like_number、set_prototype。

保存可能
コード参照を保存できるようになりました (B::Deparse 経由なので、確実ではありません)。

厳格な
strict プラグマの以前のバージョンでは、暗黙的に渡されたパラメータがチェックされませんでした。
その「インポート」(使用)ルーチンと「アンインポート」(いいえ)ルーチンに。 これにより、次のような誤った慣用句が発生しました
を次のように定義しています:

厳密な qw(@ISA) を使用します。
@ISA = qw(Foo);

ただし、これは (おそらく) 厳密な refs、vars、および
sub は強制されていました (そして @ISA が何らかの形で「宣言」されました)。 しかし、厳格な審判たちは、
var と sub は この誤ったイディオムを使用する場合は強制されます。

Perl 5.8.1 以降、上記 意志 エラーが発生する原因となります。 これにより発生する可能性があります
以前は警告やエラーが発生することなく、一見正しく実行されていたプログラムが失敗する
5.8.1 で実行した場合。 これが起こる理由は、

厳密な qw(@ISA) を使用します。

今度は次のエラーが発生して失敗します。

不明な「厳密」タグ「@ISA」です

この問題を解決するには、このコードを正しいイディオムに置き換えます。

厳格な使用;
vars qw(@ISA) を使用します。
@ISA = qw(Foo);

用語::ANSIカラー
テスト::ハーネス
テスト スクリプトからの余分な出力または欠落している出力について、より厳密に選択できるようになりました。

テスト::詳細
Test :: Simple
テキスト::バランス
時間::ハイレゾ
活用 ナノスリープ()、利用可能な場合は、XNUMX 秒未満のスリープとアラームを混在させることができます。

スレッド
いくつかの修正。たとえば、 join() 問題とメモリリーク。 一部のプラットフォームでは
(Linux のように) glibc を使用する場合、XNUMX つの i スレッドの最小メモリ フットプリントは次のようになります。
数百キロバイト削減されました。

スレッド::共有
多くのメモリ リークが修正されました。

Unicode :: Collat​​e
Unicode :: Normalize
Win32::GetFolderPath
Win32::GetOSVersion
追加情報を返すようになりました。

ユーティリティ 変更


「h2xs」ユーティリティは、よりモダンなレイアウトを生成するようになりました。 Foo-Bar/lib/Foo/Bar.pm
フー/バー/バー.pm。 また、ボイラープレート テストは次のように呼ばれます。 t/Foo-Bar.t t/1.t.

Perl デバッガ (lib/perl5db.pl) は広範囲に文書化され、バグが発見されました。
ドキュメントが修正されている間。

「perldoc」は、より堅牢で機能が豊富になるように最初から書き直されました。

「perlcc -B」は少なくともいくらか改善されて動作するようになりましたが、「perlcc -c」はかなり壊れています。
(Perl コンパイラ スイート全体は引き続き実験的です。)

新作 ドキュメンテーション


perl573delta は、(現在は完全に廃止されています) 間の違いをリストするために追加されました。
開発リリース 5.7.2 および 5.7.3。

perl58delta が追加されました。これは 5.8.0 の perldelta であり、相違点を詳しく説明しています。
5.6.0と5.8.0の間。

perlartistic が追加されました。これはポッド形式のアーティスト ライセンスであり、簡単になります。
モジュールがそれを参照できるようにします。

perlcheat が追加されました。これは Perl のチートシートです。

perlgpl が追加されました。これは pod 形式の GNU General Public License であり、
モジュールがそれを参照しやすくなります。

Mac OS X での Perl のインストールと使用について説明するために、perlmacosx が追加されました。

OS/400 PASE での Perl のインストールと使用について説明するために、perlos400 が追加されました。

perlreref が追加されました。これは正規表現のクイック リファレンスです。

インストール および   改善点


Unix 標準 Perl の場所、 / usr / bin / perl、次の場合、デフォルトで上書きされなくなりました。
存在します。 非常に多くの Unix ベンダーがすでに
/ usr / bin / perlですが、同時に多くのシステム ユーティリティがその正確なバージョンに依存する可能性があります。
Perl のバージョンなので、上書きしないほうがよいでしょう。

サイトおよびベンダーのマニュアル ページと HTML ページのインストール ディレクトリを指定できるようになりました。
サイトおよびベンダーのスクリプト。 見る INSTALL.

を指定することで、Perl のインストール先ディレクトリを指定できるようになりました。
「make install」の DESTDIR 変数。 (この機能は、
前の「Configure -Dinstallprefix=...」。) を参照してください。 INSTALL.

gcc バージョン 3.x では、Perl 実行中に多くのノイズを引き起こす新しい警告が導入されました。
コンパイル: "gcc -Ialreadyknowndirectory (警告: 検索順序の変更)"。 この警告は
コンパイル前にそのようなディレクトリを構成によって除外することで、この問題が回避されるようになりました。

Configure フラグを使用して Perl コア モジュールのサブセットを構築できるようになりました。
「-Dnoextensions=...」および「-Donlyextensions=...」を参照してください。 INSTALL.

プラットフォーム固有 強化
Cygwin では、Perl をスレッドで構築できるようになりました (「Configure -Duseithreads」)。 これは、
Cygwin 1.3.22 と Cygwin 1.5.3 の両方。

新しい FreeBSD リリースでは、Perl 5.8.0 を使用しようとしたためにコンパイルが失敗しました。 malloc.h,
FreeBSD ではこれは単なるダミー ファイルであり、使用しようとしても致命的なエラーになります。 今 malloc.h
使用されていません。

Perl は現在、Hitachi HI-UXMPP でもビルドできることが知られています。

Perl は現在、LynxOS で再びビルドされることが知られています。

Mac OS X は、インストール ディレクトリ名に Perl バージョン番号が埋め込まれてインストールされるようになりました。
ユーザーがコンパイルした Perl および一般的なインストール ディレクトリのアップグレードを容易にするため
はより標準的です。 言い換えれば、デフォルトのインストールによって Apple が壊れることはなくなりました。
Perl を提供しました。 一方、「Configure -Dprefix=」では/ usr「今なら本当にできるよ
Apple が提供する Perl を置き換えます (お願いします be 注意深い).

Mac OS X は、デフォルトで Perl を静的にビルドするようになりました。 この変更は主に高速化のために行われました
起動時間。 Apple が提供する Perl は依然として動的にリンクおよび共有されており、
「Configure -Duseshrplib」により、独自の Perl ビルドの共有を有効にできます。

Perl は IBM の OS/400 PASE 環境に移植されました。 Perl を構築する最良の方法
PASE は、AIX ホストをクロスコンパイル環境として使用します。 README.os400を参照してください。

さらに別のクロスコンパイル オプションが追加されました。Perl は OpenZaurus 上に構築されるようになりました。
Mandrake + Embedix をベースにした Sharp Zaurus PDA 用の Linux ディストリビューション。 を参照してください。
クロス/README ファイル。

Tru64 は、gcc 3 を使用すると、 toke.c 巨大なため「-O2」に
デフォルトの「-O3」でメモリを使用します。

Tru64 は、新しい Berkeley DB を使用して Perl を構築できるようになりました。

WinCE での Perl の構築が大幅に強化されました。を参照してください。 README.ce および README.perlce.

選択した バグ 解消された問題


クロージャー、 評価する および 語彙
匿名サブルーチン、語彙、クロージャの分野で多くの修正が行われました。 それでも
これは、Perl がより「正確」になったことを意味します。一部の既存のコードは、
誤った動作に依存して発生したブレーク。 実際には、そうでない限り、これは起こりそうにありません。
コードには、匿名の subs、eval、および字句の非常に複雑なネストが含まれています。

ジェネリック 修正
入力ファイルハンドルが「:utf8」とマークされており、実行時に Perl が不正な UTF-8 が入ってくることを認識した場合
」 "、警告が有効になっている場合、沈黙する代わりに警告がすぐに表示されます。
それについて、Perl は後で壊れたデータについて不満を抱きました。 (「:encoding(utf8)」レイヤー
も同様に機能します。)

binmode(SOCKET, ":utf8") は入力側でのみ機能し、出力側では機能しませんでした。
ソケット。 今では両方の方法で機能します。

スレッド化された Perls の場合、特定のシステム データベース機能は次のようになります。 getpwent() および getgrent()
失敗するのではなく、結果バッファを動的に拡大します。 つまり、次のようなサイトでは、
多くのユーザーやグループが、部分的な結果のみを返して関数が失敗することはなくなりました。

Perl 5.8.0 は、ユーザーが独自の定義を行う機能を誤って壊してしまいました。
大文字<->小文字の Unicode マッピング (Camel によって通知される)。 この機能には、
修正され、文書化も改善されました。

5.8.0ではこれ

$some_unicode .= ;

正しく動作せず、代わりにデータが破損しました。 この問題は修正されました。

FETCH などの関連付けられたメソッドは、関連付けられた値に安全にアクセスできるようになりました。
FETCH などの再帰呼び出し。ただし、再帰を中断することを忘れないでください。

Perl は起動時に SIGFPE 信号をブロックします。これについて Perl ができることはあまりないからです。
以前は、このブロックは Perl 内から実行されるプログラムにも有効でした。 今
Perl は、実行前に元の SIGFPE 処理ルーチンを復元します。
外部プログラム。

Perl スクリプトの行番号が 65536、つまり 2**16 より大きくなる可能性があります。 (Perl スクリプトには
常にそれより大きくすることは可能ですが、報告されたエラーの行番号だけです
警告が「ラップアラウンド」されています。)これほど大きいスクリプトは、通常、
コードを少し考え直してください。そのような Perl スクリプトは、たとえば生成されたスクリプトの結果として存在します。
コード。 これで、行番号は 4294967296、つまり 2**32 までになります。

プラットフォーム固有 修正
Linux

· $0 の設定は再び機能します (Perl ではあまり対処できない特定の制限があります: を参照)
perlvar の「$0」)

HP-UX

· $0 の設定が機能するようになりました。

VMS

· 構成は「poll()」の存在をテストするようになり、IO::Poll は
ベンダー提供の関数が検出された場合。

· Perl イメージがインストールされている場合、Perl 起動時にまれにアクセス違反が発生する可能性がありました。
特権がある場合、またはサブシステム属性が設定された識別子があった場合
プロセスの権利リスト。 これらの状況のいずれかにより、汚染されたコードがトリガーされました。
ポインタのバグが含まれていました。 ポインタ演算の誤りが修正されました。

· %ENV ハッシュの値 (キーではない) の長さ制限が 255 バイトから引き上げられました
~ 32640 バイト (PERL_ENV_TABLES 設定がデフォルトの使用をオーバーライドする場合を除く)
%ENV の論理名)。 これらの長い値に外部からアクセスする必要がある場合
Perl では、これらが格納されている検索リストの論理名を使用して実装されていることに注意してください。
値を部分単位で表し、各 255 バイトの部分 (最大 128 個) が、
検索リスト。 Perl 内から %ENV でルックアップを実行すると、要素が結合されます。
単一の値に変換します。 個々の要素にアクセスする既存の VMS 固有の機能
$ENV{'foo;N'} 構文による検索リストの論理名の名前 (N は検索リスト)
インデックス)は損なわれていません。

· 配管の実装では、相互接続にグローバルではなくローカルの DCL シンボルが使用されるようになりました。
プロセスコミュニケーション。

· File::Find は、その名前の相対ディレクトリに移動すると混乱する可能性がありました。
論理名と衝突しました。 この問題はディレクトリを追加することで修正されました
構文を相対パス名に変換するため、論理名の変換が妨げられます。

Win32

· メモリリーク フォーク() エミュレーションが修正されました。

· の戻り値 ioctl() 組み込み関数が 5.8.0 で誤って壊れてしまいました。
これは修正されました。

· ブロック操作中に Perl によって内部メッセージ ループが実行される場合がある
Perl の外部にあるメッセージを妨害しました。 これによりブロックされることがよくありました
Perl が実行されている場合、操作が途中で終了するか、誤った結果が返される
Windows メッセージが生成される可能性のある環境で実行されます。 これは、
修正しました。

· パイプとソケットは自動的にバイナリ モードになりました。

· の XNUMX つの引数形式 選択する() $を保存しませんでした! (errno) そこにあるときは適切に
基礎となる呼び出しにエラーがありました。 これは修正されました。

· の「CR CR LF」問題は修正され、binmode(FH, ":crlf") は事実上
ノーオペレーション。

新作 or かわった 診断法


に関連するすべての警告 パック() および unpack() より有益で一貫性のあるものになりました。

かわった "A 終了しました while %d スレッド した ランニング"
古いバージョン

%d 個の他のスレッドがまだ実行中にスレッドが終了しました

「その他」には警告を発するスレッドも含まれていたため、誤解を招きました。

削除済み "試み 〜へ クリア a 制限されました ハッシュ"
制限付きハッシュをクリアすることは違法ではないため、警告は削除されました。

新作 "違法 宣言 of 匿名の サブルーチン"
「sub」にはコードのブロックを指定する必要があります。

かわった "無効 範囲 "%s" in 音訳 オペレーター"
古いバージョン

音訳演算子の [] 範囲「%s」が無効です

tr// には「[] 範囲」がないため、単純に間違っていました。/.

新作 "ない コントロール チャリオット in \c"
一目瞭然。

新作 「改行 in 左寄せ 文字列 for %s "
パディングスペースは改行の後に表示されますが、これはおそらくあなたが持っていたものではありません
マインド。

新作 "可能 優先順位 問題 on ビット単位 %c オペレーター"
あなたがこれを考えるなら

$x & $y == 0

$x と $y のビット単位の AND がゼロかどうかをテストする場合、この警告は気に入るでしょう。

新作 「擬似ハッシュ」   廃止されました」
この警告は 5.8.0 にすでに存在しているはずです。

新作 "読んだ() on %s ファイルハンドル %s "
それはできません 読んだ() (または sysread()) 閉じられたまたは開かれていないファイルハンドルから。

新作 "5.005 スレッド   廃止されました」
この警告は 5.8.0 にすでに存在しているはずです。

新作 「縛られた 変数 解放 while まだ in 使用"
何かがライブ結合変数のプラグを引っ張ったため、Perl はベイルアウトすることで安全を確保します。

新作 「%s へ: 違法 マッピング 「%s」
不正なユーザー定義の Unicode ケースマッピングが指定されました。

新作 "使用 of 解放 in 反復」
何かが反復処理中の値を変更しました。 これは良くない。

かわった 内部


これらのニュースは、XS コードを作成するか、それについて知りたい、またはハッキングしたい場合にのみ重要です。
Perl の内部 (Devel::Peek または「B::」モジュールのカウントのいずれかを使用)、または Perl を実行するのが好き
「-D」オプションを使用します。

perlembed の埋め込み例は、最新かつ一貫性があることが確認されています。
たとえば、の正しい使用法 PERL_SYS_INIT3() および PERL_SYS_TERM().

パッド コード (字句変数を担当するコード) が大幅に作り直されました。
デイブ・ミッチェル指揮。

John Peacock による V 弦に関する広範な研究。

UTF-8 の長さと位置のキャッシュ: Unicode (UTF-8) スカラーの処理を高速化するには、
キャッシュが導入されました。 拡張機能が公式 API をバイパスする場合、潜在的な問題が存在します。
SV の PV を直接変更します。UTF-8 キャッシュは正常にクリアされません。

Perl 5.8.0 で廃止された sv_2pv、sv_catpvn、sv_catsv、sv_setsv などの API が再び廃止されました。
にアクセスできるようにしています。

cxinc や regatom などの特定の Perl コア C API はコードでまったく使用できなくなりました
Perl コア拡張の Perl コアの外側。 これは意図的なものです。 彼らは決して
短い名前で利用できるはずであり、アプリケーションがそれらに依存している場合は、
(恥ずかしくて) perl5-porters に問い合わせて、適切な API について話し合うべきです。

「Perl_list」などの特定の Perl コア C API は、「Perl_」なしでは使用できなくなりました。
接頭語。 一部の関数が見つからないために XS モジュールが動作しなくなった場合、多くの場合、
この場合の簡単な修正は、関​​数とスレッド コンテキストに「Perl_」プレフィックスを追加することです。
関数呼び出しの最初の引数として「aTHX_」を指定します。 これも常にそうあるべきです
Perl_ のないフォームがコアから漏洩するのは事故でした。 のために
埋め込みをよりクリーンにするには、コンパイル時に cpp を定義することで、すべての API に対してこれを強制することもできます。
PERL_NO_SHORT_NAMES を定義します。

Perl_save_bool() 追加されました。

正規表現オブジェクト (「qr」で作成されたもの) は、R マジックではなく S マジックを持つようになりました。 これは修正されました
/...(??{...;$x})/ 形式の正規表現を使用して、$x に加えられた変更を無視しなくなりました。 Sマジック
キャッシュの最適化が削除され、(??{...}) 構造が異常に遅くなるのを回避します
(そして結果として役に立たない)。 perlguts の「マジック変数」も参照してください。 正規表現::コピーは
この変更の影響を受けます。

Perl の内部デバッグ マクロ デバッグ() および DEB() に名前が変更されました PERL_DEBUG() および
PERL_DEB() 名前空間の競合を回避するため。

「-DL」が削除されました (リークテストは壊れていて何年もサポートされていませんでした。代替品を使用してください)
mallocs または valgrind や Purify などのツールのデバッグ)。

詳細修飾子「v」が「-DXv」および「-Dsv」に追加されました。perlrun を参照してください。

新作 テスト


Perl 5.8.0 では、約 69000 のテスト ファイルに約 700 の個別のテストがありました。Perl 5.8.1 では、
約 77000 のテスト ファイルには、約 780 の個別のテストがあります。 正確な数値は以下によって異なります
Perl 構成とオペレーティング システム プラットフォーム上で。

知られている 問題


「互換性のない変更」で言及されているハッシュのランダム化には明らかに問題があります。
眠っているバグを目覚めさせ、悪い思い込みを振り払うでしょう。

mod_perl 2.x を Perl 5.8.1 とともに使用する場合は、mod_perl-1.99_10 以降が必要です。
mod_perl 2.x の以前のバージョンは、ランダム化されたハッシュでは動作しません。 (mod_perl 1.x
正常に動作します。) Apache::Test 1.04 以降も必要です。

Perl 100 で 5.8.0% またはほぼそれに近い状態で動作した稀なプラットフォームの多くは、
最近メンテナーが多忙のため、少し放置されていましたが、
したがって、これらのプラットフォームではさらに多くの障害が発生することになります。 このようなプラットフォームには Mac が含まれます
OS Classic、IBM z/OS (およびその他の EBCDIC プラットフォーム)、および NetWare。 最も一般的な Perl
プラットフォーム (Unix および Unix 類似プラットフォーム、Microsoft プラットフォーム、および VMS) には十分な規模のテストがあり、
専門家集団はうまくやっていると考えています。

タイド ハッシュ in スカラー コンテキスト
タイド ハッシュは現在、スカラー コンテキストでは有用なものを何も返しません。たとえば、次のような場合です。
ブール値テストとして使用されます。

if (%tied_hash) { ... }

現在の無意味な動作は、
ハッシュが空であるか、要素が含まれています。

根本的な原因は、結合されたハッシュの実装者がアクセスできるインターフェイスがないことです。
スカラーコンテキストでのハッシュの動作を実装します。

Net :: Ping 450_サービス および 510_ping_udp 障害
lib/Net/Ping/t/9_service.t のサブテスト 18 と 450、および lib/Net/Ping/t/2_service.t のサブテスト XNUMX
ネットワーク設定が異常な場合、lib/Net/Ping/t/510_ping_udp.t が失敗する可能性があります。 のために
後者の例では、テストは IP アドレスに UDP ping を送信しようとしています。
127.0.0.1.

紀元前
C 生成コンパイラ バックエンド B::C (フロントエンドは「perlcc -c」) はさらに強力です
大幅な字句変数の変更により、以前よりも壊れています。 (いいもの
B::Bytecode と ByteLoader が以前よりも優れているというニュースがあります)。

プラットフォーム 特定の 問題


EBCDIC プラットフォーム
IBM z/OS およびその他の EBCDIC プラットフォームには、Unicode サポートに関して引き続き問題があります。
多くの Unicode テストは、実際に修正する必要がある場合にスキップされます。

Cygwin 1.5 問題
Cygwin 1.5 では、 イオ/テル および 操作/システム テストには、まだ不明な理由で失敗することがあります。
1.5.5 では、スレッド テストのtress_cv、stress_re、およびtress_string は失敗します。
環境変数 PERLIO は「perlio」に設定されます (これにより、io/tell エラーも発生します)
離れて)。

Perl 5.8.1 はビルドされ、Cygwin 1.3 で適切に動作します。 (uname -a) "CYGWIN_NT-5.0 ...
1.3.22(0.78/3/2) 2003-03-18 09:20 i686 ..." で 100% の "メイクテスト" が達成されました。
「-des -Duseithreads を構成する」。

HP-UX: HP cc 警告 自己紹介 ファイルを送信 および 送信パス
特定の HP C コンパイラ リリース (B.11.11.02 など) では、次のような警告が多数表示されます。
(読みやすいように行を折り返しています):

cc: "/usr/include/sys/socket.h"、504 行目: 警告 562:
別のストレージ クラス指定子を使用した「sendfile」の再宣言:
「sendfile」は内部リンクを持ちます。
cc: "/usr/include/sys/socket.h"、505 行目: 警告 562:
別のストレージ クラス指定子を使用した「sendpath」の再宣言:
「sendpath」は内部リンクを持ちます。

警告は、Perl のビルド中と特定の lib/ExtUtils テスト中の両方で表示されます。
C コンパイラを呼び出します。 ただし、この警告は深刻なものではないため、無視しても問題ありません。

アイリックス: t/uni/tr_7jis.t 虚偽 失敗
テスト t/uni/tr_7jis.t は、「make test」またはテスト ハーネスで失敗を報告することが知られています。
IRIX の特定のリリース (少なくとも IRIX 6.5 および MIPSpro コンパイラー バージョン 7.3.1.1m) では、
ただし、手動で実行すると、テストは完全に合格します。

Mac OS X: いいえ マイマロックを使用する
Perl の malloc (「-Dusemymalloc」) は Mac OS X ではまったく機能しません。これはそういうことではありません。
ただし、ネイティブの malloc は問題なく動作するため、これは深刻です。

Tru64: いいえ ねじ込み 構築します   GNU cc (gcc)
最新の Tru64 リリース (v5.1B 以降など) では、gcc を使用してファイルをコンパイルすることはできません。
スレッド化された Perl (-Duseithreads) システムが " " ファイルは知りません
gcc。

Win32: sysopen、 sysread、 システム書き込み
5.8.0リリースの時点で、 sysopen()/sysread()/syswrite() 以前のように振る舞わないでください
「テキスト」モードに関しては5.6.1以前。 これらのビルトインは現在、常に
「バイナリ」モード(たとえ sysopen() O_TEXTフラグが渡された、または binmode() で使用されました
ファイルハンドル)。 この問題は、ディスクファイルにのみ違いをもたらすはずであることに注意してください。
ソケットとパイプは、Windowsポートでは常に「バイナリ」モードになっています。 この振る舞いとして
現在バグと見なされており、互換性のある動作が将来再導入される可能性があります
リリース。 それまでは、 sysopen(), sysread() および syswrite() はサポートされていません
「テキスト」モードの操作。

未来 方向


次のこと かもしれない 将来起こります。 を持っている最初の公に利用可能なリリース
これらの特徴は、開発者がPerl 5.9.xをリリースし、Perlで最高潮に達することです。
5.10.0リリース。 これらは現時点での私たちの最良の推測です:私たちはする権利を留保します
再考してください。

・PerlIOがデフォルトになります。 現在(Perl 5.8.xでは)stdioライブラリはまだです
Perlがstdioを動かすために特定のトリックを使用できると考える場合に使用されます 本当に 速い。 にとって
将来のリリースでは、PerlIOをさらに高速化することを目標としています。

・と呼ばれる新機能 アサーション 使えるようになる。 これは、コードを持つことができることを意味します
コードに散りばめられたアサーションと呼ばれます:通常、それらは最適化されていますが、
「-A」オプションで有効にします。

・新しい演算子「//」(定義済み-または)が使用可能になります。 これは、XNUMXつができることを意味します
言う

$ a // $ b



定義された$ a? $ a:$ b

および

$ c // = $ d;



$ c = $ d定義されていない限り、$ c;

演算子は、「||」と同じ優先順位と結合性を持ちます。 ソースコード
Perl 5.8.1ソースに対するパッチは、CPANで次のように利用可能になります。
著者/id/H/HM/HMBRAND/dor-5.8.1.diff.

・「unpack()」はデフォルトで$ _をアンパックします。

・Perlの高速化を期待して、さまざまなコピーオンライト手法が調査されます。

・CPANPLUS、Inline、およびModule :: Buildがコアモジュールになります。

・真の字句スコープのプラグマを作成する機能が導入されます。

・バイトコンパイラとバイトローダーの作業は続行されます。

・現在存在するv-stringは非推奨になる予定です。 Vレスフォーム
(1.2.3)は、「use」、「require」、および$ VERSIONとともに使用すると「バージョンオブジェクト」になります。
$ ^ Vも「バージョンオブジェクト」になるため、printf( "%vd"、...)コンストラクトはなくなります
必要とされる。 v-fulバージョン(v1.2.3)は廃止されます。 の同等性
文字列とv文字列(たとえば、現在5.8.0は "\ 5 \ 8 \ 0"に等しい)はなくなります。
そこに かもしれません be いいえ 非推奨 警告 for v-文字列、しかし:検出するのは非常に難しい
v-stringが安全に使用されている場合と使用されていない場合。

・5.005スレッドが削除されます

・$ *変数は削除されます(かなり前に非推奨になりました)

・疑似ハッシュは削除されます

各種レポート作成 バグ


バグだと思うものを見つけた場合は、最近投稿された記事を確認してください。
comp.lang.perl.miscニュースグループとperlバグデータベース http://bugs.perl.org/ 。 そこ
での情報かもしれません http://www.perl.com/ 、Perlホームページ。

報告されていないバグがあると思われる場合は、 パールバグ に含まれるプログラム
あなたのリリース。 バグを小さいながらも十分なテストケースに切り詰めてください。 あなたのバグ
レポートは、「perl-V」の出力とともに、に送信されます [メール保護] ようにするには
Perl移植チームによって分析されました。 Perl5のバグを参照して検索できます。
http://bugs.perl.org/

onworks.netサービスを使用してオンラインでperl581deltaを使用する


無料のサーバーとワークステーション

Windows と Linux のアプリをダウンロード

Linuxコマンド

Ad