• ベストアンサー

perl tr での変数の使い方

tr を使って文字列を置換する時に 検索文字列や置換後の文字列のリストとして変数を使いたいのですがうまくできません。 tr はコンパイル時に変数を展開するので eval を使わないといけないという記述を見つけたのですが そこから先のやり方がわかりません。 eval "tr/$ab/$cd/"; のように書くというような記述までは見つかるのですけれど これを使ってどうすれば変換ができるのかわからないのです。 どなたか教えてください。 (初心者でごめんなさい。eval とか全然使い方がわかりません…)

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

  • ベストアンサー
  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.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

oshiete1999
質問者

お礼

ありがとうございました。 ちゃんとできました。 リンク先を見てもよくわからなかったです。 お馬鹿でごめんなさい…

関連するQ&A

専門家に質問してみよう