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などのルーチンを使用してコード内に明示的に実装する必要があります。

フィードバック

お役に立ちましたか?

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

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

送信