in reply to case insensitive replace, but maintains capitalization
Maybe this is what you mean — i.e. replace (for example) 'cat' with 'dog', but only if 'Cat' is capitalized, the replacement word should also be capitalized, otherwise not (?)
#!/usr/bin/perl -wl use strict; my %repl = ( cat => 'dog', foo => 'bar', ); sub repl { my $word = shift; my $lookup = lc $word; return $word unless exists $repl{$lookup}; # nothing to replace my $is_up = $word =~ /^[[:upper:]]/; # determine caps style my $repl = $repl{$lookup}; $repl = ucfirst $repl if $is_up; # apply caps style return $repl; } my $s = 'cat Cat foo Foo Blah blub'; $s =~ s/\b(\w+)\b/repl($1)/eg; print $s; # dog Dog bar Bar Blah blub
This could also be extended to handle all-uppercase words, too, or in theory any cOMbinatION, in which case the source and replacement word would have to have the same length, though.
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^2: case insensitive replace, but maintains capitalization
by Anonymous Monk on Dec 24, 2010 at 05:30 UTC | |
by samarzone (Pilgrim) on Dec 24, 2010 at 07:22 UTC |