Perl onelinerに厳格さと警告がある

Perl onelinerに厳格さと警告がある

use strict; use warnings私はPerlの次のジョークが本当に恋しいです:

perl -ne 'print unless /[0-5],[0-5]?|hernia|.{170,}|benz/' file`

特に|。条件が多いほど、フィルタリングがますます不安定になることを確認しました。

データ損失または誤った命令操作の例

123.Symptoms of hernia are all, except: | happy | energetic | sleeping | down regulation of CNS hello | running 5
Signshello of mercedes benz car model: | Big tyres | Even bigger roller | Massive emergency of try | Hello world | All from above 1

正規表現が正しく機能しない2つのエントリです。

Perlステートメントで厳格さと警告を使用する方法は?このように長い条件文をよりよく設計する方法は?

答え1

厳格さと警告が必要な場合は、答えは「一行も書かないでください」です。ほとんどすべてのライナーは、コードだけを書くPerlの傾向のために苦労しています。

代わりに複数行に展開してください。本当にしたい場合は、HEREDOCを使用して挿入できます。

 perl <<ENDPERL
 use strict;
 use warnings;

 print "This is a test\n";
 ENDPERL

または:

perl -Mstrict -Mwarnings -e 'print something'

ただし、実際にはREが警告をトリガーする可能性が低いため、正規表現のデバッグには役立ちません。

より長い条件文の場合はすぐに修正します。次回使用時に欠落していることを心配する必要がないように注意してください。あなたの例は、「単純な」grep -vタイプの設定のように見えます。

#!/usr/bin/perl

use strict;
use warnings;

my @patterns_to_skip = ( "hernia", 
                          "ignshello", );

my $regex = join ( "|", map { quotemeta } @patterns_to_skip );
$regex = qr/$regex/;

while ( <> ) {
   print unless m/$regex/;
}

答え2

perl -ne 'print unless /hernia|ignshello|...|n/' file

あなたが提供するREは、...3つ以上の文字()を含むすべての行、またはその文字を含むすべての行と一致しますn。私はこれが意図的だとは思わないが、おそらくそれが「不安定だ」と思う理由です。

この行には変数がないため、およびuse warningsuse strictほとんど役に立ちません。

関連情報