use strict; use warnings; use Test::More tests=>1; my $string = 'feeFii foo'; my $regex = qr/(...)(Fii )(...)/; $string =~ s/$regex/$1 . changer("$2") . $3/e; ok($string eq 'feefiifoo', 'change field 2'); sub changer { my $str = $_[0]; $str =~ s/\s//g; return lc $str; } #### #Untried $_ =~ s/$regex_2/$+{group_x} . $+{group_y} . changer("$+{text}")/e;