in reply to Re: Reading Regexes from File
in thread Reading Regexes from File

OK, tried a slightly different approach. Still reading the regular expressions from file, but I'm using a :: to delimit the search pattern from the replacement text. Problem is, it's literally interpreting the replacement. For example this in the file:

(\d{4})(\d{2})(\d{2})::$2-$3-$1

When run this way in the code:

my ($search, $replace) = split "::", $rule; $value =~ s/$search/$replace/si;

Yields - $2-$3-$1

I wanted it to refactor the date into a MM-DD-YYYY format.

Replies are listed 'Best First'.
Re^3: Reading Regexes from File
by johngg (Canon) on Apr 12, 2007 at 22:57 UTC
    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