我是perl的初學者,我有一個關於模式匹配的查詢。 我碰到在Perl線處寫着在perl中,s -/- 和s -/ Z--是什麼意思?
$variable =~ s-/\Z--;
而作爲代碼向前走一些其他變量被分配
$variable1 =~ s-/--;
你能告訴我這兩條線做什麼來呢? 我想知道s-/\Z--
和s-/--
是什麼意思。
我是perl的初學者,我有一個關於模式匹配的查詢。 我碰到在Perl線處寫着在perl中,s -/- 和s -/ Z--是什麼意思?
$variable =~ s-/\Z--;
而作爲代碼向前走一些其他變量被分配
$variable1 =~ s-/--;
你能告訴我這兩條線做什麼來呢? 我想知道s-/\Z--
和s-/--
是什麼意思。
$variable =~ s-/\Z--;
-
在此用作分隔符。但是,最佳做法建議您使用/
或{}
作爲分隔符。
它可以重新寫爲:
$variable =~ s{/\Z}{}; # remove a/at the end of a string
考慮:
$variable1 =~ s-/--;
再次,它可以重新寫爲:
$variable1 =~ s{/}{}; # remove the first/
的s///
搜索和替換perl中的函數可以與不同的delimeters一起使用,這就是在這種情況下所做的。他們將/
替換爲減號-
或破折號。
s-/--
從字符串中刪除第一個/
。 s-/\Z--
匹配並刪除行尾的斜線。我認爲這寫得更好:s{/$}{}
。
的s///
操作者在Perl是一種取代操作,其執行使用一種特殊的圖案,稱爲正則表達式一個字符串搜索和替換。你可以閱讀更多關於正則表達式和Perl的手冊頁中的模式匹配的是配備的Perl:
如果沒有這些系統上,嘗試搜索Google也一樣。
將變量應用於變量由=~
運算符完成。所以下面用'bar'替換變量$var
中'foo'的所有實例。
$var =~ s/foo/bar/;
所有的Perl操作符記錄在'perlop'手冊頁上。
即使最常見的分隔符是斜線(因此s ///),也可以使用任何其他標點符號作爲分隔符。因此,在這種情況下,作者決定使用破折號(-
)作爲分隔符。
這裏是上面代碼中使用破折號作爲分隔符同一行:
$var =~ s-foo-bar-;
在你的情況,破折號似乎沒有任何清晰添加到代碼,因此它可能是最好的更新改爲使用傳統的斜線。
「你也可以使用任何其他標點符號作爲分隔符」 - 實際上,你可以使用幾乎任何字符作爲分隔符:-) –
$variable1 =~ s-/--;
可以寫成
$variable =~ s{/}{}xms;
或本
$variable =~ s/ \/ //xms;
這意味着字符串中刪除第一/
。
關於s-/\Z--
,它通常是這樣寫
$variable =~ s{/ \Z}{}xms;
或該
$variable =~ s/ \/ \Z //xms;
這意味着刪除/
,如果它是在字符串(\Z
)的端部。
下面的幾個答案顯示了mo-bettah(也許)版本的s -/\ Z - '。標準分隔符是正斜槓。這是一個相同替換的版本,但使用標準斜槓分隔符:'s/\/\ Z //'。這樣做的好處是其他讀者會更容易將這看作是替代品。缺點是,大量的斜槓和反斜槓使得它看起來像一隻醉酒的雞仔在代碼上散步。記住perl的座右銘:總有不止一種方法可以做到這一點。在這種情況下,除了正斜槓作爲分隔符外,還有很多其他選項。 –