【问题标题】:Perl RegEx syntax errorPerl 正则表达式语法错误
【发布时间】:2011-11-17 01:20:51
【问题描述】:

http://perldoc.perl.org/perlrequick.html#Search-and-replace获取的以下代码sn-p给了我

Bareword 在 blub.pl 第 2 行附近的操作员预期的位置找到 “s/狗/猫/r”

这里有什么问题?我在 Windows XP 上使用 Perl 5.12.4。

代码:

$x = "I like dogs.";
$y = $x =~ s/dogs/cats/r;
print "$x $y\n";

【问题讨论】:

  • 嗯,到底是什么意思?最后的r 是什么?
  • @BrianRoach 这是非破坏性修饰符
  • 呃,好的。所以,我是对的......但只是因为我从未使用过 perl 5.14 :-D

标签: regex perl


【解决方案1】:

您正在查看 Perl 5.14 的文档。该示例未出现在 the documentation for Perl 5.12 中。

perl 5.13.2 delta中可以看到它被标记为新功能。

您可以复制变量并然后修改它以在旧版本的 Perl 中达到相同的效果。

$x = "I like dogs.";
$y = $x;
$y =~ s/dogs/cats/;
print "$x $y\n";

或者您可以使用惯用的“单线”:

$x = "I like dogs.";
($y = $x) =~ s/dogs/cats/;
print "$x $y\n";

【讨论】:

  • 这是一个完美的例子,说明为什么人们不应该在互联网上阅读 Perl 的文档。你应该在你将运行 perl 的系统上阅读 Perl 的文档。这样您就不会再遭受版本不匹配的问题了!
  • @tadmc :您至少可以(仔细)选择文档的 Perl 版本here
【解决方案2】:

我正在使用相同的版本(在 Linux 上)并得到相同的错误加上

未加引号的字符串“r”可能与将来的保留字冲突

当我删除 r.该教程是从 5.14 开始的,可能是 r 功能尚未在 5.12 中实现。

【讨论】:

    猜你喜欢
    • 2011-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多