2

perlcriticは、以下のコードの最初の eval 行でExpression form of "eval" [BuiltinFunctions::ProhibitStringyEval]に文句を言っています:

use strict;
use warnings;
use feature qw/say/;

my $hasTwitter = 1;
my $validEmail = 0;

my $rule   = '${hasTwitter} | ${validEmail}';
my $result = eval $rule;
say "Result ->  $result";

$result = eval { $rule };
say "Result -> $result";

perlCritic を修正するために eval {} を使用しようとしましたが、予期した結果が返されません。

応答は次のとおりです。

Result ->  1
Result -> ${hasTwitter} | ${validEmail}

文字列補間を使用した回避策はありますか? アイデアは、構成ファイルに一連のルールを設定し、コードがそれらを読み取って評価できるようにすることです。

ありがとう

4

3 に答える 3

5

特定のブロックに対して個々の Perl::Critic ルールをオフにすることができます。このようにコメントを追加します。二重コメント##は意図的なものであることに注意してください。

my $rule   = '${hasTwitter} | ${validEmail}';

## no critic 'ProhibitStringyEval'
my $result = eval $rule;

useこれはブロックごとに機能するため、やのように、可能な限り小さいスコープで実行する必要がありますno

なぜそうしたのかをコメントで説明するのは理にかなっています。通常、チームにはルールを選択する正当な理由があるため、特定のケースに対してより適切な理由がある場合にのみ、ルールをオフにする必要があります。

于 2015-09-23T15:47:32.020 に答える