#!/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. #### krls-mac-mini:Desktop karl$ ./cars.pl { HONDA => { comment => "This is Luxury cars.", models => { basic => ["City", "Brio", "Amaze"], plus => ["Accord"] }, }, HYUNDAI => { comment => "It is best cars.", models => { basic => ["Verna", "i10", "i20"], plus => ["Eon", "Xcent", "Tucson"], }, }, TOYOTO => { comment => "This is Class cars.", models => { basic => ["Etios", "Innova", "Camry"], plus => ["Fortuner", "Corolla"], }, }, }