質問させてください。リストからテキストを読み込んで、パターンマッチしようと思っています。
メタ文字を展開するのに悩み、evalを使う事で何とか出来たんですが、余り意味がわかってない
せいか挙動が把握しきれません。

$a = '\d \t';
($pattern,$str) = split /\s/,$a;
$_ = 'one2three';

・s/$pattern/$str/g;
・eval {s/$pattern/$str/g};
$_ -> one\tthree 
この2つでは、$patternは展開され、$strはメタ文字ではなくリテラル

eval "s/$pattern/$str/g";
$_ -> onethree
これでは、$patternは展開され、$strはメタ文字になります。

なぜ、eval " "でメタ文字が展開されるのでしょうか?
evalを使わないでメタ文字を展開する方法はありますでしょうか?
また、eval " "で展開しないようにするためにquotemetaしたんですが、2重にしなければ駄目でした。
\\tでは駄目、\\\tでは'\t'になる。これもなぜかわかりません。質問ばかりで申し訳ありませんが、
教えてください。