LifeKeeper for Linux v9.8.0 リリースには、5.8.8 から 5.32.1 にアップグレードされた Perl バージョンが含まれています。 新しいバージョンには、多くの新機能と機能強化が含まれています。 5.32.1 の新機能は、perl5320delta – what is new for perl v5.32.0 – Perldoc Browser にあります。 より簡潔な Perl 5 の歴史については、Perl 5 version history – Wikipedia を参照してください。 これらの機能強化により、Perl 5.32.1 では多くのバグが修正され、失敗や予期しない結果を引き起こすコーディング手法の一部が強化されました。 ここでは、信頼性の高いコードを実現するために従うべきいくつかのベスト プラクティスと、Perl 5.8.8 から Perl 5.32 に移行する際に注意すべきこと、または避けるべきことについて説明します。

すべてのコードには次のものが必要です。

use strict;
use warnings;

これらは、ほぼすべてのエラーまたは疑わしいコードを指摘します。その一部は過去には機能していた可能性がありますが、Perl 5.8.8 では非推奨となり、Perl 5.32 では機能しなくなります。

no warnings ‘uninitialized’;

no warnings ‘uninitialized’ プラグマでは、 undef の使用が許可されています。これは通常の Perl スタイルであり、不必要に制限する必要はありません。 追加の no warnings プラグマは、コードの変更が危険または負担が大きすぎるレガシーコードで使用される場合があります (「警告なし」は可能な限り回避する必要があります)。

以下は、以前は機能していたかもしれないが、Perl 5.32 では警告やエラーが発生したり、まったく正しく機能しなくなったりするコードの一般的な例です。 “use strict” と “use warnings” が有効になっている限り、以下にリストされているものはすべて、Perl 5.32 では警告またはエラーメッセージを表示します (これらの一部は Perl 5.8.8 でも警告を生成します)。

Implicit split into @_ - no longer works (must be fixed)

Incorrect: map { split /\001/; $_[3] }
Correct: map { @_ = split /\001/; $_[3] }

Incorrect: split /\001/, $ins;
Correct: @_ = split /\001/, $ins;

@_ は分割によって自動的に設定されなくなったため、暗黙的な分割を修正する必要があります。

Don’t use defined with hashes and arrays - no longer works (must be fixed)

Incorrect: if (defined(%hash))
Correct: if (%hash)

Incorrect: if (defined(@array))
Correct: if (@array)

Defined はハッシュと配列では機能しなくなりました。 ほとんどの場合、実行したいチェックは単純な “if” チェックです。

@INC perl include path no longer automatically includes “.”

Incorrect: my $rule = do ‘t/test.rule’;
Correct: my $rule = do ‘./t/test.rule’;

相対パスのインクルードには明示的に “.” を指定する必要があります。 (すでに @INC に手動で “.” を入力している場合を除く)。

Variable declarations require package names or scope specifiers.

Incorrect: @ISA = qw(RKBase);
Correct: our @ISA = qw(RKBase);
Correct: @NASBase::ISA = qw(RKBase);
Even Better: use parent ‘RKBase’; # (from Perl 5.10 onward, this is the preferred method for doing the above @ISA setting)

上記では、 @ISA はグローバルであり、グローバルであることを指定するための指定子、または明示的なパッケージ名のいずれかが必要です。

Hashes cannot be used as references

Incorrect: %$QueueManagers->{$qmgr}
Correct: $QueueManagers->{$qmgr}

上記では、$QueueManagers がハッシュ参照である場合、% は不要なため、Perl で警告が発生します。

Perl switch モジュールは非推奨

Switch.pm モジュールは、Perl 5.12 以降、Perl の標準ディストリビューションから削除されました。 詳細については、次の記事の “Deprecations(非推奨)” セクションを参照してください。 http://www.perl.com/pub/2010/04/inside-perl-512.html

Perl switch ステートメントは非推奨となり、LifeKeeper v9.8.0 以降、Steeye Perl モジュールには Switch モジュールは提供されません。 switch ステートメントの代わりに if/then/elsif ブロックを使用することを検討してください。

Perlのkeysルーチンはランダムな順序でキーを返します

Perl の keys ルーチンは、ランダムな順序 (セキュリティ上の懸念から5.18.0以降) でハッシュ内のキー (keys %hash) を返します。順序が必要な場合は、sort などのルーチンを使用してコード内に明示的に実装する必要があります。

フィードバック

お役に立ちましたか?

はい いいえ
お役に立ちましたか
理由をお聞かせください
フィードバックありがとうございました

このトピックへフィードバック

送信