in reply to Variable substitution

$find='\\d{2}-\\d{2}-\\d{4}'
means $find contains
\d{2}-\d{2}-\d{4}
Now, since `` supports the same escapes as as "", "\" followed by a letter is either special or reserved depending on the letter. \d doesn't yet have a use, so it emits a warning ("Unrecognized escape \d passed through") and treats the letter as a non-letter: "d" is returned. That means you are executing
perl -pi.bak -e "s|d{2}-d{2}-d{4}|...|g" ...

Why don't you use

my $find = '\\d{2}-\\d{2}-\\d{4}'; my $replace = '{date}'; s/$find/$replace/

Update: If I were to speculate:

To which you'll reply "So I can use $1"

To which I'll reply. Well, you could use

my $find = '(\\d{2}-\\d{2})-(\\d{4})'; my $replace = '$2-$1'; eval "s/\$find/$replace/"

but that would be pretty dumb. You need a template system, and the Perl interpreter is not that. The one I've come across that best fits the current syntax is String::Interpolate.