2011-12-20 20 views
6

Perl docs建議是:perl的S /這/那/ R ==> 「裸詞發現哪裏算料」

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

有沒有更好的解決辦法?

+2

這是否正在運行在Perl 5.14上? (確保在你的頭文件中有一個'require v5.14;') – BRFennPocock 2011-12-20 20:00:19

+0

編輯:顯然'use v5.13.2'是's // // r'的最低級別。 – BRFennPocock 2011-12-20 20:06:39

+3

我們在這裏學到了什麼?我們已經瞭解到,我們應該閱讀以* perl分發形式出現的文檔*,而不是從「某處在網上」閱讀文檔。 :-) – tadmc 2011-12-20 20:24:03

回答

17

正如ruakh寫的,/r是perl 5.14中的新增功能。但是,您可以在以前版本的Perl中執行此操作:

(my $foo = $bar) =~ s/this/that/; 
2

有沒有更好的解決方案,不需要(雖然我通常把它寫在一行,因爲s///基本上作爲初始化過程的一部分:

my $foo = $bar; $foo =~ s/this/that/; 

)。順便說一下,錯誤消息的原因幾乎可以肯定的是,您正在運行不支持/r標誌的Perl版本。該標誌最近被添加到Perl 5.14中。您可能會發現使用您自己版本的文檔更容易開發;例如,如果您使用的是Perl 5.12.4,則可以使用http://perldoc.perl.org/5.12.4/perlop.html