use strict; use warnings; my @array = qw/foo Foo FOo FOO fOO fOo foO FoO/; my $repl = 'bar'; print "@array\n"; s{ \b(foo)\b }{ join '', map { substr( substr( $1, $_, 1 ) ge 'a' ? lc $repl : uc $repl, $_, 1 ) } 0 .. $+[0] }eix foreach @array; print "@array\n";