2

重複の可能性:
元の文字列を保持したまま、文字列に対してPerl置換を実行するにはどうすればよいですか?
Perl:s /(置換)を使用して新しい文字列を返す

あなたがそれを説明するより良い方法を見つけたら、この質問のタイトルを自由に修正してください。

私たちが持っていると想像してください:

   my $foo = something;
   my $newfoo = $foo =~ s/.*/something else/;

私はそれが1に等しいことを発見したが、私は持っているだろうと思っ$newfoo = something elseた。私はこの1が「マッチングと置換が成功する」と言うためにそこにあると想像する。

私が見つけた唯一の解決策は、シークエントです。

  my $foo = something;
  my $newfoo = $foo;
  $newfoo =~ s/.*/something else/;

同じタスクを実行する方法はありますか?つまり、最初の変数を変更せずに、中間ステップなしで、正規表現の結果を使用して新しい変数を作成する方法はありますか?

4

2 に答える 2

5

perl 5.14以降を使用している場合、これは機能します。これは非破壊置換と呼ばれます。それ以外の場合は、一時的な割り当てに固執する必要があります。

my $newfoo = $foo =~ s/.*/something else/r;
                                         ^ Add this
于 2012-06-25T15:01:58.697 に答える
3

括弧を慎重に使用することで、Perlの任意のバージョンで置換を割り当てて実行できます。

(my $newfoo = $foo) =~ s/.*/something else/;

この場合、Perl v5.14を使用すると1回のキーストロークを節約できます(ただし、v5.14には他の利点がある場合があります)

于 2012-06-25T15:56:02.920 に答える