プロが教える店舗&オフィスのセキュリティ対策術

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

(初心者でごめんなさい。eval とか全然使い方がわかりません…)

A 回答 (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-Qu …
http://perldoc.jp/docs/perl/5.16.1/perlop.pod#Re …
    • good
    • 0
この回答へのお礼

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

お礼日時:2013/07/23 21:31

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!