来自perlop
:
如果“/”是分隔符,则初始m是可选的。使用m,您可以使用任何一对非空白字符作为分隔符。这对于匹配包含“/”的路径名特别有用,以避免LTS(倾斜牙签综合征)。如果“?”是分隔符,然后是“PATTERN”的仅匹配一次规则?适用。如果“'”是分隔符,则不对PATTERN执行插值。当在标识符中使用有效字符时,在m。
之后需要空格
所以我可以把任何一封信作为分隔符。最终这个正则表达式应该没问题:
s/ou/es/
可以改写
$ perl -e '$_ = qw/ou/; stoutest; print'
ou
然而它似乎在Perl中不起作用。为什么呢?
{{1}}
答案 0 :(得分:12)
因为Perl无法选择运算符s
任何非空白分隔符都可以替换斜杠。使用标识符中允许的字符后,在s后添加空格。
这个程序运行正常
my $s = 'bout';
$s =~ s toutest;
say $s;
best
答案 1 :(得分:4)
替换运算符以s
标识符开头,而您的代码没有。必须使用
s toutest
如果按照您的想法运作,我们就无法拥有以m
,s
,tr
,q
或{{1开头的任何运营商或子程序因为所有这些都可以跟随任何非空白分隔符。
具有讽刺意味的是,您自己的代码证明了为什么它不能像您想象的那样。如果它按你想象的方式工作
y
不等同于
$_ = qw/ou/; stoutest; print
这相当于
$_ = qw/ou/; s/ou/es/; print
又名
$_ = q'/ou/; stoutest; print
答案 2 :(得分:4)
因为?autoplay=1
或任何其他字母数字字符串是Perl解析器眼中的单个标记。否则,我们无法使用以stoutest
(或s
,m
或q
开头的任何裸字。
这很有效,但
y