#!/usr/bin/perl use strict; # https://perlmonks.org/?node_id=11142528 use warnings; my @AoH = do { local $/ = "objet => fin\n"; map { s/^objet => .*\n//gm; +{ split /"?\n(?:\.{3}\n)?| => "?/} } ; }; use Data::Dump 'dd'; dd \@AoH; __DATA__ objet => debut index => 1 a => "premiere valeur" b => 'better example required" z => "dernier mot" objet => fin objet => debut index => 77 a => "autre valeur" y => 'better example required" z => "aurai-je le dernier mot ?" objet => fin #### [ { a => "premiere valeur", b => "'better example required", index => 1, z => "dernier mot", }, { a => "autre valeur", index => 77, y => "'better example required", z => "aurai-je le dernier mot ?", }, ]