use v5.12; use warnings; use Data::Dump qw/pp dd/; my @AoH; my $count = 0; while () { chomp; if ( /---START---/ .. /---END---/) { if ( /\|([A-Z]+): (.+)/) { $AoH[$count]{$1}=$2; } $count++ if /---END---/; } } pp \@AoH; __DATA__ ---START---- |FULLNAME: JANE DEO |BINF : 492BBJJ |PRICE: 10 |COUNTRY: GR ---END--- ---START---- |FULLNAME: JOHN DEO |BINF : K92BBJJ |PRICE: 24 |COUNTRY: AS ---END--- #### [ { COUNTRY => "GR", FULLNAME => "JANE DEO", PRICE => 10 }, { COUNTRY => "AS", FULLNAME => "JOHN DEO", PRICE => 24 }, ]