You actually have two problems. First, regexes don't work on arrays directly. Second, a substitution (s///) returns the number of substitutions made. You don't want $term = s/$full/$abb/g, because the = will assign that count to $term. You want =~ which means "make this regex act on" (sort of).
This could be easily fixed by slurping, rather than reading your IN into an array.
Update:benizi pointed out my foolishness in capturing word boundaries. The sad thing is, I knew that and did it anyway. That's like the fourth really dumb thing I've done today. Sigh. Thanks, benizi!# instead of @myin = <IN>; my $myin; { local $/ = undef; $myin = <IN>; #slurp all to scalar } #instead of print "@myin\n"; @myin = s/$full/$abb/g; print "$myin\n"; $myin =~ s/\b$full\b/abb/g
I took the liberty of capturingmatching word boundaries (\b) and adding them back ($1 and $2), since without that code, you'd replace too much. For example, trying to replace all occurances of 'hello' with 'hi', you'd change 'Othello' into 'Othi'. ;-) Checking for word boundaries should help with that.
In reply to Re: find and replace
by radiantmatrix
in thread find and replace
by texuser74
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |