my $str =" [India] Captain1 = Dhoni Batsman1 = Sachin Bowler1 = Zaheer [Aussie] Captain = Ponting Batsman = Clarke Bowler = Warne [Aussie] Captain = Hussey Batsman = Waugh Bowler = Mcgrath"; my @l = split "\n", $str ; my $key ; my %rez ; for my $it (@l) { next if $it =~ m /^$/ ; if ($it =~ m/^\[(.*)\]/) { $key = $1 } else { my @t = split "=", $it ; $rez{$key}{ $t[0] } = $t[1] } } use Data::Dumper ; print Dumper \%rez ;