http://www.perlmonks.org?node_id=870852


in reply to Store regular expressions in a file.

yoda54:

I put this together:

#!/usr/bin/perl use strict; use warnings; # Read the regexes my @Rexes; while (my $t=<DATA>) { chomp $t; last if $t=~/^$/; my ($regex, $repl) = split /\t+/, $t; push @Rexes, [ qr($regex), $repl ]; } # Process the text while (my $l = <DATA>) { $l=~s/$$_[0]/$$_[1]/eg for @Rexes; print $l; } __DATA__ duck cluck a(b+)c c$1a That bird says "duck!" xyzzy plugh ac abc abbc abbbc

It mostly works, but as you can see from the following run, I haven't been able to make back references work...

roboticus@Boink:~ $ perl pm870806_dyn_regex.pl That bird says "cluck!" xyzzy plugh ac c$1a c$1a c$1a

...roboticus

Replies are listed 'Best First'.
Re^2: Store regular expressions in a file.
by eff_i_g (Curate) on Nov 11, 2010 at 15:48 UTC
    #!/usr/local/bin/perl use strict; use warnings; use String::Interpolate qw(safe_interpolate); # Read the regexes my @Rexes; while (my $t = <DATA>) { chomp $t; last if $t =~ /^$/; my ($regex, $repl) = split /\t+/, $t; push @Rexes, [ qr($regex), $repl ]; } # Process the text while (my $l = <DATA>) { $l=~ s/$$_[0]/safe_interpolate($$_[1])/eg for @Rexes; print $l, "\n"; } __DATA__ duck cluck a(b+)c \uc${1}\ua That bird says "duck!" xyzzy plugh ac abc abbc abbbc
    That bird says "cluck!" xyzzy plugh ac CbA CbbA CbbbA

      ++eff_i_g:

      Sweet! I played with it for a while before giving up on the capture groups. I'll have to be sure to keep this handy!

      ...roboticus

      Thanks everyone for the enlightenment!!