You can use substr()
as an lvalue and start replacing the string from right side of it,
my $string = 'GATGCAGTTAGGCGTAGCAGAGTGAGACGACGACGATATTAGGACCCGGTAAGGCACAATATAGC';
my %coord_colors = (
10 => "red",
48 => "orange",
60 => "purple",
);
substr($string,$_,0) = $coord_colors{$_}
for sort { $b <=> $a } keys %coord_colors;
print $string;
output
GATGCAGTTAredGGCGTAGCAGAGTGAGACGACGACGATATTAGGACCCGorangeGTAAGGCACAATpurpleATAGC
using regex,
$string =~ s|.{$_}\K|$coord_colors{$_}|s
for sort { $b <=> $a } keys %coord_colors;
solved split string into several substring using indexes