in reply to how extract and group data in a array
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
|
|---|