$query =~ s/$value/$replace/i;
The problem is that $value contains something like $Id, and the $ when interpreted as a regex means "match the end of the string", not "match a dollar sign". You can fix that by writing
s/\Q$value\E/$replace/i;
instead.
Fwiw this is how I'd solve the same task:
my @array_1 = ("\$Id_run_query=1", "\$name_run_query=xyz", "db_query_r +un_query=select * from meter where metetid=\$Id and metername=\$name" +); my $query; my %replace; foreach(@array_1){ if (m/^db_query_run_query=(.*)/i){ $query = $1 } elsif (/(\$\S+)_run_query=(.*)/) { $replace{$1} = $2; } } my $replace_re = join '|', map quotemeta, keys %replace; $query =~ s/($replace_re)/$replace{$1}/ig; print "===>$query\n";
The call to quotemeta does the same as \Q...\E in the regex.
In reply to Re: Regex is not working
by moritz
in thread Regex is not working
by Rahul Gupta
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |