use strict; use warnings; use Data::Dumper; my $data = '[-3|1|29x250+46+26|200+300+464|Get][-3|1|29x250+46+26|132+100+244|come][-3|1|29x250+46+26|220+124+432|Go]'; my @splitted = map { [ split /\+/, (split /\|/)[3] ] } split /]\[/, $data; print Dumper \@splitted;