2011-07-02 72 views
1

我是perl的初學者,我有一個關於模式匹配的查詢。 我碰到在Perl線處寫着在perl中,s -/- 和s -/ Z--是什麼意思?

$variable =~ s-/\Z--; 

而作爲代碼向前走一些其他變量被分配

$variable1 =~ s-/--; 

你能告訴我這兩條線做什麼來呢? 我想知道s-/\Z--s-/--是什麼意思。

+0

下面的幾個答案顯示了mo-bettah(也許)版本的s -/\ Z - '。標準分隔符是正斜槓。這是一個相同替換的版本,但使用標準斜槓分隔符:'s/\/\ Z //'。這樣做的好處是其他讀者會更容易將這看作是替代品。缺點是,大量的斜槓和反斜槓使得它看起來像一隻醉酒的雞仔在代碼上散步。記住perl的座右銘:總有不止一種方法可以做到這一點。在這種情況下,除了正斜槓作爲分隔符外,還有很多其他選項。 –

回答

5
$variable =~ s-/\Z--; 

-在此用作分隔符。但是,最佳做法建議您使用/{}作爲分隔符。

它可以重新寫爲:

$variable =~ s{/\Z}{}; # remove a/at the end of a string 

考慮:

$variable1 =~ s-/--; 

再次,它可以重新寫爲:

$variable1 =~ s{/}{}; # remove the first/
1

s///搜索和替換perl中的函數可以與不同的delimeters一起使用,這就是在這種情況下所做的。他們將/替換爲減號-或破折號。

s-/--從字符串中刪除第一個/s-/\Z--匹配並刪除行尾的斜線。我認爲這寫得更好:s{/$}{}

5

s///操作者在Perl是一種取代操作,其執行使用一種特殊的圖案,稱爲正則表達式一個字符串搜索和替換。你可以閱讀更多關於正則表達式和Perl的手冊頁中的模式匹配的是配備的Perl:

如果沒有這些系統上,嘗試搜索Google也一樣。

將變量應用於變量由=~運算符完成。所以下面用'bar'替換變量$var中'foo'的所有實例。

$var =~ s/foo/bar/; 

所有的Perl操作符記錄在'perlop'手冊頁上。

即使最常見的分隔符是斜線(因此s ///),也可以使用任何其他標點符號作爲分隔符。因此,在這種情況下,作者決定使用破折號(-)作爲分隔符。

這裏是上面代碼中使用破折號作爲分隔符同一行:

$var =~ s-foo-bar-; 

在你的情況,破折號似乎沒有任何清晰添加到代碼,因此它可能是最好的更新改爲使用傳統的斜線。

+1

「你也可以使用任何其他標點符號作爲分隔符」 - 實際上,你可以使用幾乎任何字符作爲分隔符:-) –

-1
  1. $variable1 =~ s-/--;可以寫成

    $variable =~ s{/}{}xms; 
    

    或本

    $variable =~ s/ \/ //xms; 
    

    這意味着字符串中刪除第一/

  2. 關於s-/\Z--,它通常是這樣寫

    $variable =~ s{/ \Z}{}xms; 
    

    或該

    $variable =~ s/ \/ \Z //xms; 
    

    這意味着刪除/,如果它是在字符串(\Z)的端部。

相關問題