首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >perl s/这个/那个/r ==> "Bareword found where operator expected“

perl s/这个/那个/r ==> "Bareword found where operator expected“
EN

Stack Overflow用户
提问于 2011-12-21 03:44:57
回答 3查看 4.5K关注 0票数 8

Perl docs建议这样做:

代码语言:javascript
复制
$foo = $bar =~ s/this/that/r;

然而,我得到了这个错误:

代码语言:javascript
复制
Bareword found where operator expected near
    "s/this/that/r" (#1)

这是特定于r修饰符的,没有它,代码就可以工作。但是,我不想修改$bar。当然,我可以替换

代码语言:javascript
复制
my $foo = $bar =~ s/this/that/r;

使用

代码语言:javascript
复制
my $foo = $bar;
$foo =~ s/this/that/;

有没有更好的解决方案?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-12-21 03:53:47

正如ruakh所写的,/r是Perl5.14中的新特性。但是,您可以在以前的perl版本中做到这一点:

代码语言:javascript
复制
(my $foo = $bar) =~ s/this/that/;
票数 20
EN

Stack Overflow用户

发布于 2011-12-21 03:49:56

没有更好的解决方案了(尽管我通常把它写在一行,因为s///本质上是初始化过程的一部分:

代码语言:javascript
复制
my $foo = $bar; $foo =~ s/this/that/;

顺便说一句,您的错误消息的原因几乎可以肯定是您正在运行的Perl版本不支持/r标志。该标志是最近在Perl5.14中添加的。您可能会发现,使用您自己版本的文档进行开发会更容易;例如,如果您使用的是Perl5.12.4,则使用http://perldoc.perl.org/5.12.4/perlop.html

票数 2
EN

Stack Overflow用户

发布于 2021-01-21 11:34:49

为了完整性。如果您使用的是较旧版本的perl。并且确实希望使用s///命令,而不是求助于使用临时变量。这里有一种方法:

代码语言:javascript
复制
perl -E 'say map { s/_iter\d+\s*$//; $_ } $ENV{PWD}'

基本上使用map来转换字符串的副本并返回最终输出。而不是s///所做的-返回替换的计数。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8581021

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档