#!/usr/bin/perl -w use strict; my $test="xyz,[a,b],c,'d',[e,[f,g,h,[i,j],k,l],m,n],o,p"; my @test = $test =~ m/,|[\w']+|[\[\]]/g; my @result; while (@test) { my $t = shift @test; if ($t =~ /[\w']+/) { push (@result, $t); } #simple "word" thing elsif ($t =~ /\[/) #complex bracketed expression { push (@result, bracket_exp()); } # commas are skipped.. } sub bracket_exp { my $temp ="["; my $depth = 1; while ($depth) { my $next_thing = shift @test; $temp .= $next_thing; $depth++ if $next_thing eq '['; $depth-- if $next_thing eq ']'; } return ($temp); } foreach my $t ( @result) { print "$t\n"; } __END__ prints: xyz [a,b] c 'd' [e,[f,g,h,[i,j],k,l],m,n] o p