in reply to Double-duty commas

If trailing commas (on each line) would not an issue this might work for what you are doing:
#!/usr/bin/perl -w use strict; use warnings; $_ = 'foo:a,bar:a,b,c,baz:d,faa:this,is,great'; my @array = m/(\w+:(?:(?>\w+,?)+)(?!:))/g; print $_,$/ for @array; __END__ foo:a, bar:a,b,c, baz:d, faa:this,is,great

update: Re: Double-duty commas is much more elegant