- ベストアンサー
Perlで変数を使用した置換ができない
- Perlのスクリプトで変数を使用した置換がうまくいかない場合、正しい展開方法を確認する必要があります。
- 変数展開がうまくいかない場合、変数が正しく設定されているか、正しい置換方法を使用しているかを確認しましょう。
- Perlの置換処理では、正規表現を使用して置換することが一般的です。正しい正規表現のパターンを設定することで、変数の展開が正しく行われます。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
正規表現の置換部はダブルクォート文字列と同様に評価されるので、次の2つの文は同じように機能します。質問のケースでは、変数を2重に置き換えなければならないので、明示的にダブルクォートが必要になります。 $string[$i+1] =~ s/$search/$1回/g; $string[$i+1] =~ s/$search/"$1回"/eg;
その他の回答 (4)
- ORUKA1951
- ベストアンサー率45% (5062/11036)
>ただ、質問に対する回答としてはズレがあるのではないかと思います。 と言われても、 >>ファイル内の「1 2 3 4 5」などの数字の箇所を、「1回 2回 3回 4回 5回」のように、「回」をつけた形に変えることを考えています。 だったらいちいち配列やハッシュに入れる必要はないかと・・ もうすこし具体的にオリジナルデータ中に、ぽつんと「1\t2\t3\t4\t5」とあるのか、詳しい説明がないと・・ 例 1_挨拶とオリエンテーション 2_カリキュラムの紹介、HTMLとは ・・・とか
お礼
質問に答えるだけの能力がないことをわざわざお知らせいただき、ありがとうございました。 今後ともよろしくお願いします。
- kumoz
- ベストアンサー率64% (120/185)
次のようにすれば、置き換えられるかも? $string[$i+1] =~ s/$search/qq(\"$replace\")/eeg;
お礼
ありがとうございました。無事、動きました。 もしよろしければ、補足入力もご覧いただければと思います。
補足
ありがとうございました。置換文字列を「式」とみなす(evaluation)ことを2回繰り返しているのですね。ただ、ここでの$replaceが、どのようにして最終的な展開形となるのか、うまく自分の頭のなかで説明できません。qq( ) と、" " がどのように機能している(「"」がエスケープされている理由も含めて)のでしょうか。
- ORUKA1951
- ベストアンサー率45% (5062/11036)
(my $search, my $replace) は2値の配列なのに、元データは?? chomp($search_replace); my $separator = "\t"; my $newSeparator = "回"; $search_replace =~s/$separator/$newSeparator/g; print $search_replace,$newSeparator,"\n"; とか chomp($search_replace); my $separator = "\t"; my $newSeparator = "回"; my @data = split(/$separator/, $search_replace); while(<@data>){ print $_,$newSeparator; } print "\n";
お礼
ありがとうございました。ただ、質問に対する回答としてはズレがあるのではないかと思います。
- Tacosan
- ベストアンサー率23% (3656/15482)
えばる
お礼
ありがとうございました。鈍感な私では、それがevaluationのことだとはわかりませんでした。
お礼
なるほど、よくわかりました。 ありがとうございました。