I used the range operator approach like Athanasius but, to avoid keeping track of state, inside a grep feeding into a join with nuls then a couple of splits, one breaking the string into chunks between the 'D' and the 'M', the other inside a map breaking each chunk into an array ref.
use strict; use warnings; use Data::Dumper; my @dd = qw{ AA JJ CC M 1 1 3 4 D JJ 1 1 D M 3 3 4 D C M 3 3 3 D P Z +}; my @AoA = map { [ split m{\0} ] } split m{(?<=\0D)\0(?=M\0)}, join qq{\0}, grep { m{^M$} .. m{^D$} } @dd; print Data::Dumper->Dumpxs( [ \ @AoA ], [ qw{ *AoA } ] );
The output.
@AoA = ( [ 'M', '1', '1', '3', '4', 'D' ], [ 'M', '3', '3', '4', 'D' ], [ 'M', '3', '3', '3', 'D' ] );
A bit convoluted I suppose.
Cheers,
JohnGG
In reply to Re: how extract and group data in a array
by johngg
in thread how extract and group data in a array
by Anonymous Monk
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |