Below I offered what I thought was a different perspective on this problem, then I realized I had redone your solution. Ooops.
I would, however, suggest that your solution could be improved by using split and join as follows:
I also tossed in a lc() so that capitalization in the $replace_word doesn't "contaminate" the pattern in the $match_word.#!/usr/local/bin/perl -l -w use strict; my $str = "SAdBoy"; $str =~ s/($str)/fix_case($1, 'badgirl')/eig; print $str; sub fix_case { my ($match_word, $replace_word) = @_; my @rep = split //, $replace_word; my $i = 0; for (split '', $match_word) { $rep[$i] = $_ eq lc($_) ? lc($rep[$i++]) : uc($rep[$i++]); } return join '', @rep; }
I offer this because I am of the impression that using substr that often is somewhat expensive.
In reply to Re: Re: Case-sensitive substitution with case-insensitive matches
by snax
in thread Case-sensitive substitution with case-insensitive matches
by Anonymous Monk
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |