my $replace = sub { my $prefix = $1; #COLLECT YOUR PAIRS SOMEHOW; A m// OR s/// ALSO POSSIBLE my @pairs = split(/(.*?[=].*?)(?:[,])?/, $prefix); #DEAL WITH PAIRS HOWEVER YOU LIKE push @allpairs, @pairs; #RETURN WHATEVER REPLACEMENT YOU LIKE FOR $prefix return $prefix; #NO CHANGE AT ALL }; #CAPTURE EVERYTHING UP TO, NOT INCLUDING, "batch =" $syspbuff =~ s/(.*?)(?=batch\s*=)/$replace->()/em;