How can I add a variable to a regexp? (Perl) -
so here's sample
while (<fh>) { $line = $_; chomp($line); $marksearchpat= "href=\"\@x\@embeddedfile\.requesturlstub\@x\@bbcswebdav\/xid"; $markreplacepat= "href=\"http:\/\/www\.facepalm\.org\/bbcswebdav\/xid"; ## (mark) duplicate input file lines "altered" file, making substitutions necessary. $linenumber++; print "line $linenumber has been read\n"; $line2=$_; $line2=~s/$marksearchpat/$markreplacepat/eig; print whout $line2; print whlog 'at '.localtime().', replaced '. $marksearchpat .' '. $markreplacepat .' @ line '.$linenumber.' of file '.$file."\n";
how add regex variable (a regex match variable)to $marksearchpat , $markreplacepat
you can't with
s/$search_pat/$replace/
since interpolation not interpret interpolated values @ all. that's why added /e
.
s/$search_pat/$replace_code/e
in above, value of $replace_code
expected perl code. last expression in $replace_code
evaluates replacement string. perl code that? either of following do:
'http://www.facepalm.org/bbcswebdav/xid-' . $1 "http://www.facepalm.org/bbcswebdav/xid-$1"
to place in $replace_code
, can use of following:
my $replace_code = '"http://www.facepalm.org/bbcswebdav/xid-$1"'; $replace_code = q{"http://www.facepalm.org/bbcswebdav/xid-$1"}; $replace_code = q{'http://www.facepalm.org/bbcswebdav/xid-' . $1}; etc
so end with:
my $search_re = qr{href="\k\@x\@embeddedfile\.requesturlstub\@x\@bbcswebdav/xid-([0-9]{9}_2)}; $replace_code = q{"http://www.facepalm.org/bbcswebdav/xid-$1"}; s/$search_re/$replace_code/gie;
technically, don't need capture using lookahead:
my $search_re = qr{href="\k\@x\@embeddedfile\.requesturlstub\@x\@bbcswebdav/xid-(?=[0-9]{9}_2)}; $replace_code = q{"http://www.facepalm.org/bbcswebdav/xid-"}; s/$search_re/$replace_code/gie;
which means don't need /e
:
my $search_re = qr{href="\k\@x\@embeddedfile\.requesturlstub\@x\@bbcswebdav/xid-(?=[0-9]{9}_2)}; $replace_str = 'http://www.facepalm.org/bbcswebdav/xid-' s/$search_re/$replace_str/gi;
Comments
Post a Comment