2011-11-16 61 views
7

http://perldoc.perl.org/perlrequick.html#Search-and-replace採取下面的代碼片段讓我Perl的正則表達式語法錯誤

裸詞發現,其中運營商預計將在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"; 
+0

恩,這正是它說的嗎?最後的'r'是什麼? –

+0

@BrianRoach這是非破壞性修改器 – NullUserException

+0

呃,好的。所以,我是對的......但僅僅因爲我從來沒有用過perl 5.14 :-D –

回答

10

您正在尋找爲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"; 
+3

這是人們爲什麼不應該在Interweb上閱讀Perl文檔的完美例子。您應該在要運行perl的系統上讀取Perl的文檔。那麼你永遠不會遭受一輪又一輪的版本不匹配! – tadmc

+3

@tadmc:你可以至少(仔細)選擇文檔的Perl版本[here](http://perldoc.perl.org/) – JRFerguson

2

我使用(在Linux上)相同的版本,並得到同樣的錯誤加上

非上市字符串「r」可能與將來的保留字衝突

它在我刪除r時起作用。該教程從5.14開始,可能是r功能尚未在5.12中實現。