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.1に移行する際に注意すべきこと、または避けるべきことについて説明します。
すべてのコードには次のものが必要です。
use strict;
use warnings;
これらは、ほぼすべてのエラーまたは疑わしいコードを指摘します。その一部は過去には機能していた可能性がありますが、Perl 5.8.8 では非推奨となり、Perl 5.32.1では機能しなくなります。
no warnings ‘uninitialized’;
no warnings ‘uninitialized’ プラグマでは、 undef の使用が許可されています。これは通常の Perlスタイルであり、不必要に制限する必要はありません。 追加のno warningsプラグマは、コードの変更が危険または負担が大きすぎるレガシーコードで使用される場合があります (「警告なし」は可能な限り回避する必要があります)。
以下は、以前は機能していたかもしれないが、Perl 5.32.1では警告やエラーが発生したり、まったく正しく機能しなくなったりするコードの一般的な例です。 “use strict” と “use warnings” が有効になっている限り、以下にリストされているものはすべて、Perl 5.32.1では警告またはエラーメッセージを表示します (これらの一部は 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などのルーチンを使用してコード内に明示的に実装する必要があります。
このトピックへフィードバック