[英]How can I use a variable in the replacement side of the Perl substitution operator?
[英]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提供and
和or
運算符(見下文)。 短路行為是相同的。 但是,“和”和“或”的優先級要低得多,以便您可以在列表運算符之后安全地使用它們而無需括號:
這是非常主觀的,最好的答案在很大程度上取決於它與你的編碼風格的匹配程度,但無論如何我都會戴上帽子。
我最喜歡的默認分配是第三級運算符:
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.