perl s / this / that / r ==> “Bareword发现了运营商的预期”

时间:2011-12-20 19:44:57

标签: perl bareword

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/;

有更好的解决方案吗?

3 个答案:

答案 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/// 所做的 - 返回替换次数。