in reply to Re: Case-sensitive substitution with case-insensitive matches
in thread Case-sensitive substitution with case-insensitive matches
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.
|
|---|