• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Perlでの文字列置換)

Perlでの文字列置換についての問題

このQ&Aのポイント
  • 大学の研究でPerlを使用している際に、文字列置換について問題が発生しました。
  • 特定の文字列を置換するスクリプトを作成しましたが、うまく置換ができません。
  • 実行結果を確認したところ、置換が行われていないことがわかりました。どのような問題が原因なのか教えていただきたいです。

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

  • ベストアンサー
  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.2

すみません。何を問題にしているかがわかりません。 このスクリプトでどうなることを期待しているのですか? > $string=~ s/(=$L1_before)/=$L1_after/g; 変数$string(に格納された文字列)に対してs//コマンドで置換を試みてますが、このスクリプト中では$stringになにかを代入したいるようすが無いので、無意味な命令になっていますが。

yu1024_2010
質問者

お礼

わざわざ補足までしておいて申し訳ないのですが、何とか問題が解決しました。 重ね重ね回答ありがとうございました。

yu1024_2010
質問者

補足

回答ありがとうございます。 おっしゃる通り、私の記述が間違っていました。以下のように記述を書き直しました。 **************************************************************************** printf(STDERR "start replacement\n"); $L1_before="L1_01"; $L1_after=3.14; $string="+ L1_01\n"; $string=~ s/(=$L1_before)/=$L1_after/g; printf(STDERR "L1_before=%s\n",$L1_before); printf(STDERR "L1_after=%.2f\n",$L1_after); printf(STDERR "string=%s",$string); printf(STDERR "end replacement\n"); **************************************************************************** このスクリプトでは、$stringに格納されている"+ L1_01\n"という文字列に対して、 $L1_beforeに格納されている"L1_01"という文字列を$L1_afterに格納されている3.14 で置換することを期待しています。しかし、実際の実行結果は以下のようになります。 **************************************************************************** start replacement L1_before=L1_01 L1_after=3.14 string=+ L1_01 end replacement **************************************************************************** ちゃんと置換されるためには、どのように書き直せばよいでしょうか。

その他の回答 (2)

  • kuroizell
  • ベストアンサー率55% (95/170)
回答No.3

文字列の置換は以下のように書きます。 my $hoge = "hogehoge"; my $old = "o"; my $new = "a"; $hoge =~ s/$old/$new/g; print $hoge; # hagehage ちなみにprint $hoge =~ s/$old/$new/g;とやると  2 と出力されます。 これは評価数(マッチした回数)が返っている状態です。

yu1024_2010
質問者

お礼

丁寧に教えていただきありがとうございました。 無事問題が解決しました。

回答No.1

$string に 改行(\n)が入っていないのに一票。 それぞれを下記のように変更してみたらどうです? あと use strict; も足してみてください。 $L1_before="+ L1_01"; $string=~s/=${L1_before}$/=${L1_after}/mg;

参考URL:
http://www.perldoc.jp/docs/perl/
yu1024_2010
質問者

お礼

回答ありがとうございました。 さっそく試してみます。

関連するQ&A