• ベストアンサー

ある変数の内容を編集して他の変数に代入する方法

Perl で、例えば $old に "123ABCDE456" という値が入っているとします。 これを、"ABCDE" を削除して $new に入れたいのですが、私はいつも   $new = $old;   $new =~ s/ABCDE//; のようにやっています。これで、確かに目的の結果にはなるのですが… こういう操作を、1行の文で書ける方法はないでしょうか? よろしくお願いします。 (但し、$new = $old, $new =~ s/ABCDE//; で1行だよ、というのは当然除きます^^)

質問者が選んだベストアンサー

  • ベストアンサー
  • moon_piyo
  • ベストアンサー率60% (88/146)
回答No.1

($new = $old) =~ s/ABCDE//;

dep98
質問者

お礼

なるほど、いかにも Perl らしいスマートな書き方ですね。 ありがとうございました。

その他の回答 (2)

  • moon_piyo
  • ベストアンサー率60% (88/146)
回答No.3

#2です 質問者さまの,ご指摘のとおりです。 foreach,map,grepなどでの $_への操作は,もとのリスト の要素に反映されることをわすれておりました たとえば ($new) = map {local $_=$_;s/ABCDE//;$_} ($old); とすればよかったようです。お手数をおかけしてすいませんでした。

dep98
質問者

お礼

度々ありがとうございます。 > ($new) = map {local $_=$_;s/ABCDE//;$_} ($old); 確かに、これはうまくいきました。 でも、何をやってるのか理解するのに、ちょっと骨が折れますね… これからは、No.1 のやり方でいきたいと思います。

  • moon_piyo
  • ベストアンサー率60% (88/146)
回答No.2

あと...これは1行かどうか...(笑) ($new) = map{s/ABCDE//;$_} ($old);

dep98
質問者

補足

ん? 私も map をイマイチよく理解してないので実際に確かめてみましたが、これだと、$old の値も 123456 に変更されてしまうようですが…

関連するQ&A