Perl

在 Perl oneliner 中有嚴格和警告

  • June 20, 2015

我真的很想念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

其中正則表達式工作不穩定的兩個條目。

如何在 Perl 單行語句中使用嚴格和警告?如何更好地設計這麼長的條件語句?

如果你想要嚴格和警告,答案是“不要做一個單一的班輪”。幾乎總是有一個班輪遭受 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/;
}

引用自:https://unix.stackexchange.com/questions/209774