- ベストアンサー
perl tr での変数の使い方
tr を使って文字列を置換する時に 検索文字列や置換後の文字列のリストとして変数を使いたいのですがうまくできません。 tr はコンパイル時に変数を展開するので eval を使わないといけないという記述を見つけたのですが そこから先のやり方がわかりません。 eval "tr/$ab/$cd/"; のように書くというような記述までは見つかるのですけれど これを使ってどうすれば変換ができるのかわからないのです。 どなたか教えてください。 (初心者でごめんなさい。eval とか全然使い方がわかりません…)
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
Perlのevalは、「その文字列が、最初からプログラムに書いてあったかのように解釈されて、実行される」というものです。 http://perldoc.perl.org/functions/eval.html http://perldoc.jp/func/eval $s='$a=10+5' ; eval $s ; # => $sが展開され $a=10+5 ; と書いてあるかのように解釈されて実行される なので、「そこで実行したいプログラムになるような文字列」を用意します。 my $f = '0123' ; my $t = '4567' ; my $x='abc0123' ; # ここで $x =~ tr/0123/4567/ を実行したい eval "\$x =~ tr/$f/$t/" ; # say "\$x =~ tr/$f/$t/" ; #↑が期待通りの文字列か確認 っていうか、ちゃんと例が載ってますよね http://perldoc.perl.org/perlop.html#Quote-and-Quote-like-Operators http://perldoc.jp/docs/perl/5.16.1/perlop.pod#Regexp32Quote-Like32Operators
お礼
ありがとうございました。 ちゃんとできました。 リンク先を見てもよくわからなかったです。 お馬鹿でごめんなさい…