#!/usr/bin/perl use strict; use warnings; use Text::Balanced qw/extract_bracketed extract_multiple/; my $test="[a,b],c,'d',[e,[f,g,h,[i,j],k,l],m,n],o,p"; my @split = grep { $_ ne ',' } extract_multiple( $test, [ \&extract_bracketed, qr/[^\[,]+/, ',', ] ); print "@split\n";