- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Perlでの文字列置換)
Perlでの文字列置換についての問題
このQ&Aのポイント
- 大学の研究でPerlを使用している際に、文字列置換について問題が発生しました。
- 特定の文字列を置換するスクリプトを作成しましたが、うまく置換ができません。
- 実行結果を確認したところ、置換が行われていないことがわかりました。どのような問題が原因なのか教えていただきたいです。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
すみません。何を問題にしているかがわかりません。 このスクリプトでどうなることを期待しているのですか? > $string=~ s/(=$L1_before)/=$L1_after/g; 変数$string(に格納された文字列)に対してs//コマンドで置換を試みてますが、このスクリプト中では$stringになにかを代入したいるようすが無いので、無意味な命令になっていますが。
その他の回答 (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 と出力されます。 これは評価数(マッチした回数)が返っている状態です。
質問者
お礼
丁寧に教えていただきありがとうございました。 無事問題が解決しました。
- tsuduki123
- ベストアンサー率32% (21/65)
回答No.1
$string に 改行(\n)が入っていないのに一票。 それぞれを下記のように変更してみたらどうです? あと use strict; も足してみてください。 $L1_before="+ L1_01"; $string=~s/=${L1_before}$/=${L1_after}/mg;
質問者
お礼
回答ありがとうございました。 さっそく試してみます。
お礼
わざわざ補足までしておいて申し訳ないのですが、何とか問題が解決しました。 重ね重ね回答ありがとうございました。
補足
回答ありがとうございます。 おっしゃる通り、私の記述が間違っていました。以下のように記述を書き直しました。 **************************************************************************** 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 **************************************************************************** ちゃんと置換されるためには、どのように書き直せばよいでしょうか。