s {SOMESTR} {$ myvar}在perl中的含义是什么?

MUY*_*ium 2 regex perl

有人写了类似下面的代码:

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

s///操作员和s{}{}操作员之间有什么区别?

Roh*_*ain 7

您可以在Perl匹配运算符 - m//或替换运算符 - 中使用任何一组分隔符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.
Run Code Online (Sandbox Code Playgroud)

使用不同分隔符看到的主要优点是,通过使用不同的字符作为分隔符,可以避免在文本中转义分隔符.因此,使用#as分隔符,您不需要/在字符串中转义.

来自perlop doc:

m//运营商部分:

如果"/"是分隔符,则初始m是可选的.有了m你可以使用任何对非空格(ASCII)字符作为分隔符的.这对于匹配包含的路径名称特别有用"/",以避免LTS(倾斜牙签综合征).如果"?" 是分隔符,则应用仅匹配一次规则,m?PATTERN?如下所述.

s///运营商部分:

任何非空白分隔符都可以替换斜杠.使用标识符中允许的字符后,在s后添加空格.

  • 并且它的好处是它减少了引用的需要,例如当你在表达式中有斜杠时.您可以使用一组不同的分隔符. (2认同)

Сух*_*й27 5

它是相同的运算符,但使用不同的分隔符,可用于实现更好的可读性. {}使用/e修饰符时很方便

$string =~ s{(\d)}{
  # ...
  $1 + 1;
}e;
Run Code Online (Sandbox Code Playgroud)