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. |