$hash = array('key1'=>'val2','key2'=>'val'2);
$key = 'key';
$line = 'abcd $key{key1} efgh $key{key2} ijkl';
以上のデータを使って$lineを
abc val2 efgh val2 ijkl
と成るように置換したいのですが、以下だとうまく動きません。
$line = preg_replace('/\$'.$key.'\{(.*?)\}/',$hash["\\1"],$line);
どうしたらうまく動かせるのでしょうか。教えてください。

ちなみにperlだと
$line =~ s/\$$key\{(.+?)\}/$hash{$1}/g;