簡體   English   中英

如何在Perl中替換后使用匹配變量$ 1?

[英]How can I use the match variable $1 following a substitution in Perl?

從Perl中的替換中獲取匹配變量的最簡潔方法是什么?我有時會發現自己寫作

    s/(something)// ;
    my $x = $1 ;

然后我意識到如果s/ / /失敗$1可能會帶來前一場比賽的值。 所以我試試

    my  $x = 'defaultvalue' ;
    if ( s/(something)// )
    {
     $x = $1 ;
    }

這是最干凈的方式嗎?

TMTOWTDI。

通常看到的慣用Perl可能是這樣的:

my $x='defaultvalue';

$x=$1 if (s/(something)//) ;

正如其他人所指出的那樣,TIMTOWTDI。

我個人將它作為單個表達式包裝起來,以免過分分散注意力:

my $x = s/(something)// ? $1 : 'defaultvalue';

@mobrule在評論中指出你可以使用

s{(...)}{} && ($x=$1)

我會推薦

s{(...)}{} and $x = $1;

我使用了s{}{}因為我很討厭Markdown標記//作為Perl代碼中的注釋。

and優先級低於&& ,這使得可以刪除賦值周圍的括號。

來自perldoc perlop

作為&&||更可讀的替代品 當用於控制流時,Perl提供andor運算符(見下文)。 短路行為是相同的。 但是,“和”和“或”的優先級要低得多,以便您可以在列表運算符之后安全地使用它們而無需括號:

這是非常主觀的,最好的答案在很大程度上取決於它與你的編碼風格的匹配程度,但無論如何我都會戴上帽子。

我最喜歡的默認分配是第三級運算符:

my $x = ($data =~ s/(foo)//) ? $1 : 'defaultvalue';

雖然新的(好的,不是那個新的,5.10引入它)“定義或”運算符可以在許多情況下減少對三級語句的需求。 我通常這樣使用它:

my $var = defined($candidate) ? $candidate : 'default';

但現在可以簡化為:

my $var = $candidate // 'default';

要么

my $var = 'default';
$var //= $candidate;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM