2011-12-20 4 views
6

Perl docs/R ==> "オペレータが予想どこ裸の単語が見つかった" というS /本/このお勧めします。しかし、私はこのエラーを取得するperlの

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

を:

Bareword found where operator expected near 
    "s/this/that/r" (#1) 

これは固有のものですr修飾子を使用すると、そのコードは機能しません。 しかし、私は$barを変更したくありません。私は、もちろん、

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

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

を置き換えることができます は、よりよい解決策はありますか?

+2

これはPerl 5.14で動作していますか? (あなたのヘッダに 'require v5.14;'があることを確認してください) – BRFennPocock

+0

編集:明らかに 'use v5.13.2'は' s /// r'の最小レベルです。 – BRFennPocock

+3

ここで何を学んだのですか?私たちは、「ウェブ上のどこか」からドキュメントを読むのではなく、perlディストリビューションに付属のドキュメント*を読むべきだということを学びました。 :-) – tadmc

答えて

17

ruakhが書いたように、/rはperl 5.14の新機能です。しかし、以前のバージョンのperlでこれを行うことができます:

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

は良い解決策、ノー(s///は、基本的に初期化プロセスの一部として機能しているので、私は通常、1行にそれを書くかかわら:

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となります。