I agree with dasgar - you are only doing one split! Either do it as dasgar suggests, or keep it simple and just use split:
DB<5> $s = q/"foo:bar","test:boing!","whirrr:clunk"/;
DB<6> %hsh = split /[:,]/, $s; ## do both the required splits in one
+ step
DB<7> x %hsh
0 '"whirrr'
1 'clunk"'
2 '"foo'
3 'bar"'
4 '"test'
5 'boing!"'
Admittedly this test will be caught out by delimiters inside the quotes and spaces between the key/val pairs, but it is a start as to how this problem could be solved... TIMTOWTDI!
Just a something something...