- ベストアンサー
テキスト置換プログラミングの作成方法
- テキスト置換プログラミングを作成しようとしていますが、上手くいかず困っています。入力したテキストを置換するプログラムを作成するために、テキストエリアに文章を入力し、置換前の文字と置換後の文字を入力する形にしました。しかし、置換前の文字が正しく置換されず、削除される問題が発生しています。
- プログラムでは、POSTメソッドによるフォームの入力データを受け取り、入力された置換前の文字と置換後の文字を取得しています。そして、入力された文章の中から置換前の文字を検索し、一致する部分を置換後の文字に変換しています。しかし、現在のプログラムではうまく動作していないようです。
- もし間違いがあれば教えていただきたいです。また、複数の置換を一度に行いたい場合にどのようなプログラムの変更が必要かも教えていただけると助かります。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
かなり惜しいです。 $in{"$key"} = $value; $in{'chikan'} =~ s/\Q$in{'a1'}\E/$in{'a2'}/g; } のところを $in{"$key"} = $value; } $in{'chikan'} =~ s/\Q$in{'a1'}\E/$in{'a2'}/g; にすれば希望の動作になると思います。 foreachの中で処理をするとループ中なので何回も置換処理されます。 1回目 $in{'chikan'}=定義済 $in{'a1'}=未定義 $in{'a2'}=未定義 結果→a1が未定義のため置換対象がない 2回目 $in{'chikan'}=定義済 $in{'a1'}=定義済 $in{'a2'}=未定義 結果→a1があるがa2がないのでa1とマッチする部分が削除というのと同じになる 3回目 $in{'chikan'}=定義済 $in{'a1'}=定義済 $in{'a2'}=定義済 結果→a2が定義されたがchikanは2回目の時点で置換処理が行われたためa1とマッチする文字はすでにない という処理になっていた訳です。
その他の回答 (1)
- kuroizell
- ベストアンサー率55% (95/170)
それ、前世紀の書き方だそうです。 CGIモジュール使いましょう。 #!/usr/local/bin/perl use strict; use warnings; use CGI; use CGI::Carp qw(fatalsToBrowser); my $q = CGI->new(); my $a1 = $q->param('a1'); my $a2 = $a1; $a2 =~ s/old/new/g; print <<EOF; Content-type: text/html; charset=UTF-8\n 以下略
お礼
ありがとうございます。 無事に思い通りの形で動きました。 失敗の原因もわかって勉強になりました。