I don't think that is ever going to work, although more experienced Monks may know better. The method I described is only good for replacing a pattern with simple text. You are getting the literal $2-$3-$1 because the perl interpreter sees the scalar
$replace when it parses your code and interpolates it's contents as a literal string rather than seeing the "magical to regular expressions"
$1 etc. If you try to rectify things by
eval'ing
$replace, i.e
$value =~ s/$search/eval "$replace"/sie then Perl interprets that as a sum and comes up with, for today's date, -2015.
To do anything more fancy than a simple text replacement you will almost certainly have to take the eval approach suggested by duff and expanded on by ikegami.
Cheers,
JohnGG