8

Perlのドキュメントはこれを推奨しています:

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

より良い解決策はありますか?

4

3 に答える 3

20

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

(my $foo = $bar) =~ s/this/that/;
于 2011-12-20T19:53:47.223 に答える
2

これ以上の解決策はありません(ただし、これs///は基本的に初期化プロセスの一部として機能するため、通常は1行で記述します。

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

ちなみに、エラーメッセージの理由は、/rフラグをサポートしていないバージョンのPerlを実行していることはほぼ間違いありません。このフラグはごく最近、Perl5.14で追加されました。独自のバージョンのドキュメントを使用して開発する方が簡単な場合があります。たとえば、Perl 5.12.4を使用している場合は、 http: //perldoc.perl.org/5.12.4/perlop.htmlです。

于 2011-12-20T19:49:55.697 に答える
-1

完全を期すために。古いバージョンのperl. s///そして、一時変数を使用せずにコマンドを実際に使用したい。1 つの方法を次に示します。

perl -E 'say map { s/_iter\d+\s*$//; $_ } $ENV{PWD}'

基本的に map を使用して文字列のコピーを変換し、最終的な出力を返します。何をする代わりにs///- 置換の数を返すのです。

于 2021-01-21T03:34:49.417 に答える