有人写了类似下面的代码:
#! /usr/bin/perl
my $myVar = 'somecomplicatedString';
my $someString = 'mySystemvariable=SOMESTR';
if ( $someString =~ /SOMESTR/ ) {
$someSting =~ s{SOMESTR}{$myVar}
}
# $someString now equals 'mySystemvariable=somecomplicatedString'
s///
运算符和s{}{}
运算符之间有什么区别?
答案 0 :(得分: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.
使用不同的分隔符看到的主要优点是,您可以通过使用不同的字符作为分隔符来避免在文本中转义分隔符。
因此,使用#
作为分隔符,您无需在字符串中转义/
。
来自perlop doc:
在m//
运营商部分:
如果
"/"
是分隔符,则初始m
是可选的。使用m
,您可以使用任何一对非空格(ASCII)字符作为分隔符。这对于匹配包含"/"
的路径名特别有用,以避免LTS(倾斜牙签综合征)。如果"?"
是分隔符,然后应用仅匹配规则,如下面的m?PATTERN?
所述。
在s///
运营商部分:
任何非空白分隔符都可以替换斜杠。使用标识符中允许的字符时,在s之后添加空格。
答案 1 :(得分:5)
它是相同的运算符,但使用不同的分隔符可用于实现更好的可读性。
使用{}
修饰符
/e
非常方便
$string =~ s{(\d)}{
# ...
$1 + 1;
}e;