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
    Bingo!! This is exactly what I wanted!!

      This script beautifully handles the first letter of the word. You'll still have to define the (complex) rules for this in case you need more than just first letter. For example if you want "animal" to be replaced by "pet" then what should "ANiMal" be replaced with?

      -- Regards - Samar