in reply to find and replace
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.
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re: find and replace
by benizi (Hermit) on Nov 04, 2005 at 19:23 UTC |