sub rgb2percent { my $string = shift; my $MAX_COLOR = 255; my ($r,$g,$b) = $string =~ m/(\d*\.?\d+) # 1st number .*\,[^\d]* # the comma and spaces, - etc (\d*\.?\d+) # 2nd number .*\,[^\d]* # again garbage or formatting (\d*\.?\d+)/x; # 3rd and final number my %mask = ( r => $r, g => $g, b => $b); for my $color ( keys %mask ) { $mask{$color} = ( $mask{$color} % ($MAX_COLOR+1) ) / $MAX_COLOR; } return [$mask{r}, $mask{g}, $mask{b}]; }