2

誰かが次のコードのようなものを書いています:

#! /usr/bin/perl
my $myVar = 'somecomplicatedString'; 
my $someString = 'mySystemvariable=SOMESTR';
if ( $someString =~ /SOMESTR/ ) {
        $someSting =~ s{SOMESTR}{$myVar}
}
# $someString now equals 'mySystemvariable=somecomplicatedString'

s///オペレーターとオペレーターの違いは何s{}{}ですか?

4

2 に答える 2

7

m//Perl の一致演算子 -または置換演算子 - では、任意の区切り文字のセットを使用できますs///

その他の例:

s#oldTest#newTest#
s/oldTest/newTest/
s!oldTest!newTest!
s~oldTest~newTest~
s{oldTest}{newTest}   # Here we use appropriate opening and closing braces.

m/someText/
m!someText!
/someText/   # You can omit the `m` when `/` is delimiter
!someText!   # This is Wrong. You can't omit `m` in other delimiter.

さまざまな区切り文字を使用する主な利点は、区切り文字として別​​の文字を使用することで、テキスト内の区切り文字のエスケープを回避できることです。したがって、#区切り文字として使用すると、文字列内でエスケープする必要はありません/

perlop docから:

m//オペレーターセクションの下:

が区切り文字の場合"/"、イニシャルmはオプションです。をm使用すると、非空白 (ASCII) 文字の任意のペアを区切り文字として使用できます。"/"これは、LTS (つまようじ傾き症候群) を回避するために、 を含むパス名を照合する場合に特に役立ちます。"?" が区切り文字の場合、以下で説明する、1 回のみの一致ルールが適用されm?PATTERN?ます。

s///オペレーターセクションの下:

空白以外の区切り文字は、スラッシュを置き換えることができます。識別子に使用できる文字を使用する場合は、s の後にスペースを追加します。

于 2013-08-21T10:16:02.657 に答える
5

これは同じ演算子ですが、読みやすくするために使用できる異なる区切り文字を使用しています。 修飾子{}を使用するときに便利です。/e

$string =~ s{(\d)}{
  # ...
  $1 + 1;
}e;
于 2013-08-21T10:16:40.477 に答える