The following example assumes these strings are sitting in a file somewhere,
that every instance of this search pattern has the possibility of more than one digit preceding the tilde,
and that there won't ever be an empty key.
{ local $/=undef;
$string = <FILE>; #where FILE has been opened previously
%colors = $string =~ /(\d+)~<font color="(.*?)"/ig;
}
If your strings are sitting in an array, you could join the array
$string = join '', @array;
If you data doesn't precisely match, it may be necessary to make it might be necessary to make the search pattern a little more general, but hope this helps for a start.
Cheers,
Kristina
Update: I didn't refresh to catch your replies before I hit submit, but ironically, this addresses your other concern, so it all works out in the end. This method is more efficient than a foreach loop.