use strict; use warnings; use Data::Dumper; { local $/; $_ = ; } my $raDataItems = [ map {[split m{\n}]} m{(ITEM.*?)(?=(?:\z|ITEM))}sg ]; my $dd = Data::Dumper->new([$raDataItems], [q{raDataItems}]); print $dd->Dumpxs(); __END__ ITEM NO:1 [aaa] 111 [bbb] 222 [ccc] 333 ITEM NO:2 [ddd] 444 [eee] 555 [fff] 666 ITEM NO:3 [ggg] 777 [hhh] 888 [iii] 999