http://www.perlmonks.org?node_id=961941


in reply to Regex + substring

... sometimes there can be "-" character within the string ...

Along with JavaFan, I have no idea what's supposed to happen when a '-' character is encountered, so I'll just tiptoe quietly around that one.

Your apparent first thought about using split doesn't seem so bad:

>perl -wMstrict -le "my $orig = 'AABBCCDDEEFFGGHH'; my $mod = 'bCCDdEEFfgGH'; ;; my @chunks = split /$mod/i, $orig; my $new = qq{\L$chunks[0]\E$mod\L$chunks[1]\E}; print qq{'$new'}; " 'aabbCCDdEEFfgGHh'

Update 1: If there might be  * + ? [ ] etc. metacharacter-like things in the  $mod string, best to split on  /\Q$mod\E/i instead.

Update 2: A more general approach (updated again to be a lot simpler):

>perl -wMstrict -le "my $orig = 'fEEfoobarFIEFooBarFoEfOoBaRfUM'; my $mod = 'FooBar'; ;; my @chunks = split /\Q$mod\E/i, $orig, -1; my $new = join $mod, map lc(), @chunks; print qq{'$new'}; " 'feeFooBarfieFooBarfoeFooBarfum'