my $s = 'x'; print("\$s is $s,\$s =~ s///r is ",$s =~ s///r, ".\n"); $s =~ /x/; print("\$s is $s,\$s =~ s///r is ",$s =~ s///r, ".\n");
印刷品
$s is x,$s =~ s///r is x. $s is x,$s =~ s///r is .
那么第三行之后有什么变化呢?
qqrboqgw1#
这是关于空字符串模式的行为。
perl -wE'$s = "x arest"; $s =~ /x a/; $r = ($s =~ s///r); say $s; say $r'
打印相同的$s,然后打印rest当模式是空字符串时,这是一个特殊的行为,它会影响这一点,每个perlop如果模式评估为空字串,则会改用上次成功执行的正则表达式。显然,//(空字符串)模式被最后一个匹配项替换,而 * 即 * 在这里被从字符串中删除;然后在/r下剩下的返回
$s
rest
//
/r
perl -wE'$s = "x arest"; $s =~ /x a/; $r = ($s =~ s//X/r); say $r'
打印Xrest。几点注意事项
Xrest
pos
perl -wE'$s = "x arest"; $s =~ /x a/g; pos $s = 1; $r = ($s =~ s///r); say $r'
我添加了/g,以便能够使用pos。只使用$&?
/g
$&
1条答案
按热度按时间qqrboqgw1#
这是关于空字符串模式的行为。
打印相同的
$s
,然后打印rest
当模式是空字符串时,这是一个特殊的行为,它会影响这一点,每个perlop
如果模式评估为空字串,则会改用上次成功执行的正则表达式。
显然,
//
(空字符串)模式被最后一个匹配项替换,而 * 即 * 在这里被从字符串中删除;然后在/r
下剩下的返回打印
Xrest
。几点注意事项
pos
的影响,因为此代码的工作方式相同我添加了
/g
,以便能够使用pos
。只使用$&
?