in reply to split on commas

Another option is:

use strict; use warnings; use Data::Dumper; use Regexp::Common qw/balanced/; my $string = "<*2>FOO<2,1>,<*3>(SigB<8:0:2>,BAR),<*2>Siga<2:0>,Sigb<8, +7,6,5,0>"; print "$string\n"; my @parts = $string =~ m/(?:$RE{balanced}{-parens=>'()<>'}|[^,<(]+)+/g +; print Dumper(\@parts);

which produces

<*2>FOO<2,1>,<*3>(SigB<8:0:2>,BAR),<*2>Siga<2:0>,Sigb<8,7,6,5,0> $VAR1 = [ '<*2>FOO<2,1>', '<*3>(SigB<8:0:2>,BAR)', '<*2>Siga<2:0>', 'Sigb<8,7,6,5,0>' ];