Perl docs建议:
$foo = $bar =~ s/this/that/r;
然而,我收到此错误:
Bareword found where operator expected near
"s/this/that/r" (#1)
这是r
修饰符特有的,没有代码可以使用。
但是,我不想修改$bar
。
当然,我可以替换
my $foo = $bar =~ s/this/that/r;
与
my $foo = $bar;
$foo =~ s/this/that/;
有更好的解决方案吗?
答案 0 :(得分:17)
正如Ruakh所写,/r
是perl 5.14中的新功能。但是,您可以在以前版本的perl中执行此操作:
(my $foo = $bar) =~ s/this/that/;
答案 1 :(得分:2)
没有更好的解决方案,没有(虽然我通常把它写在一行上,因为s///
基本上是初始化过程的一部分:
my $foo = $bar; $foo =~ s/this/that/;
)。顺便说一句,你的错误消息的原因几乎肯定是你正在运行一个不支持/r
标志的Perl版本。最近在Perl 5.14中添加了那面旗帜。您可能会发现使用自己版本的文档更容易开发;例如,http://perldoc.perl.org/5.12.4/perlop.html如果您使用的是Perl 5.12.4。
答案 2 :(得分:-1)
为了完整性。
如果您坚持使用旧版本的 perl
。
并且真的想使用 s///
命令而不诉诸使用临时变量。
这是一种方法:
perl -E 'say map { s/_iter\d+\s*$//; $_ } $ENV{PWD}'
基本上使用map来转换字符串的副本并返回最终输出。
而不是 s///
所做的 - 返回替换次数。