#!/usr/bin/env perl use strict; use warnings; use Data::Dump; undef $/; my $data = ; $data =~ s/\n+/ /g; my @cars = map { s/ $//; $_ } map { s/^ //; $_ } grep { $_ ne "" } split /CARS/, $data; my %cars; for (@cars) { my @record = map { s/ $//; $_ } split /\+|\*\./; my @basic = split / /, shift @record; my $brand = shift @basic; $cars{$brand}{models}{basic} = [@basic]; $cars{$brand}{comment} = pop @record; $cars{$brand}{models}{plus} = [ map { split( ' ', $_ ) } @record ]; } dd \%cars; __DATA__ CARS TOYOTO Etios Innova Camry +Fortuner Corolla *.This is Class cars. CARS HYUNDAI Verna i10 i20 +Eon Xcent +Tucson *.It is best cars. CARS HONDA City Brio Amaze +Accord *.This is Luxury cars.