my @subrecs; for(@records) { my @items = split ', '; push @subrecs => [ [map { (split ' ')[0] } @items], [map { (split ' ')[1] } @items], ]; } print Dumper(\@subrecs); __output__ $VAR1 = [ [ [ 'RECORD', 'CODE', 'TABLE' ], [ 'A', 'B', 'C' ] ], [ [ 'CODE', 'RECORD' ], [ 'A', 'B' ] ], [ [ 'TABLE' ], [ 'B' ] ], [ [ 'CODE', 'RECORD', 'FILE' ], [ 'C', 'D' ] ] ];