#! perl -slw use strict; use List::Util qw[ reduce ]; use Data::Dumper; my @AoH; while( ) { chomp; push @AoH, reduce{ my $r={}; $r->{$b}=$a; $r; } reverse split /:|=/, $_; } print Dumper \@AoH; __DATA__ a1:a2:a3=key1 a1:a2=key2 b1:b2:b3:b4:b5:b6:b7:b8:b9=key3