2011-11-16 26 views
7

http://perldoc.perl.org/perlrequick.html#Search-and-replaceから取った次のコードスニペットは、私にPerlの正規表現の構文エラー

裸の単語見つけた "のS /犬/猫/ R" の近くに、blub.plライン2で期待オペレータ

を与えます

ここで問題は何ですか?私は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

Erm、ok。だから、私は正しい...しかし、私は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

これは、人々がインターウェブ上でPerlのドキュメントを読むべきではない理由の完全な例です。代わりに、perlを実行するシステム上でPerlのドキュメントを読むべきです。次に、バージョンミスマッチのラウンドラウンドに苦しむことはありません! – tadmc

+3

@tadmc:少なくとも(慎重に)ドキュメントの[ここ](http://perldoc.perl.org/)のPerlバージョンを選択することができます。 – JRFerguson

2

私は(Linux上)同じバージョンを使用して、同じエラーを取得プラス

非上場しています文字列 "r"は将来の予約語と矛盾する可能性があります

rを削除すると動作します。このチュートリアルは5.14からのものですが、rの機能はまだ5.12では実装されていない可能性があります。