2011-07-02 29 views
1

私はperlの初心者です。パターンマッチングに関する質問があります。それはperlではs -/- とs -/ Z--は何を意味しますか?

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

を書かれた、コードは先に行くようにいくつかの他の変数は

$variable1 =~ s-/--; 

を割り当てられていたところ、私はperlでラインに出くわした あなたはこれらの2行は何をするのかを教えていただけますか? s-/\Z--s-/--の意味を知りたい。

+0

以下の回答のいくつかは、 's -/\ Z - 'のmo-bettah(多分)バージョンを示しています。標準区切り文字はスラッシュです。ここには同じ置換のバージョンがありますが、標準のスラッシュ区切り文字: '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の関数を異なるデリミタで使うことができます。彼らは/をマイナス記号-、またはダッシュに置き換えました。

s-/--は、文字列から最初の/を削除します。 s-/\Z--は、行末にスラッシュと一致して削除されます。私はこれが書かれた方が良いと思う:s{/$}{}

5

Perlでs///オペレータは正規表現と呼ばれるパターンの特別な種類を使用して、文字列の検索と置換を実行置換操作、です。あなたのシステム上でこれらを持っていない場合は、検索してみてください

:あなたは、Perlに付属している正規表現とmanページではPerlのパターンマッチングについての詳細を読むことができますGoogleは同じです。

変数に代入を適用するには、=~演算子を使用します。したがって、以下は、変数$varの 'foo'のすべてのインスタンスを 'bar'に置き換えます。

$var =~ s/foo/bar/; 

すべてのPerl演算子は、 'perlop'マニュアルページに記載されています。

最も一般的な区切り文字はスラッシュ(したがってs ///)ですが、区切り文字として他の句読文字を使用することもできます。この場合、著者はセパレータとしてダッシュ(-)を使用することに決めました。

がここセパレータとしてダッシュを使用して上記のコードの同じ行です:あなたのケースでは

$var =~ s-foo-bar-; 

、ダッシュがコードに任意の明確さを追加していないようですので、それを更新するのが最善かもしれません代わりに従来のスラッシュを使用します。

+1

"区切り文字として他の句読文字も使用できます" - 実際には、ほとんどすべての文字を区切り文字として使用できます:-) –

-1
  1. $variable1 =~ s-/--;は、それは文字列の最初の/を削除する意味

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

    またはこの

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

    のように書くことができます。 s-/\Z--について

  2. は、それが通常

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

    それは、文字列(\Z)の末尾にある場合/を削除する意味この

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

    かのように書かれています。

関連する問題