#! perl -slw use strict; use Data::Dumper; my %corps; while () { chomp; my $name = $_; $corps{$name} = []; ; while() { chomp; last if /^\s*$/; my @stuff = /^\d\s+((\d{3})\d+)\s+(\d+)/; push @{$corps{$name}}, {bid=>$stuff[0], eid=>$stuff[2], prefix=>$stuff[1]}; } } print Dumper \%corps; __DATA__ ABC corp. 1 1002003 1002007 some text here 2 1011999 1012020 other text here XYZ Ltd. 1 2031994 2032071 some text here 2 2021996 2022030 other text here 1 1871995 1872031 some text here 2 1772004 1772021 other text here PQR corp. 1 1072003 1072007 some text here 2 2011999 2012020 other text here LNM Ltd. 1 2041994 2042071 some text here 2 2051996 2052030 other text here 1 1971995 1972031 some text here 2 1472004 1472021 other text here #### c:\test>226013 $VAR1 = { 'XYZ Ltd.' => [ { 'bid' => '2031994', 'prefix' => '203', 'eid' => '2032071' }, { 'bid' => '2021996', 'prefix' => '202', 'eid' => '2022030' }, { 'bid' => '1871995', 'prefix' => '187', 'eid' => '1872031' }, { 'bid' => '1772004', 'prefix' => '177', 'eid' => '1772021' } ], 'ABC corp.' => [ { 'bid' => '1002003', 'prefix' => '100', 'eid' => '1002007' }, { 'bid' => '1011999', 'prefix' => '101', 'eid' => '1012020' } ], 'LNM Ltd.' => [ { 'bid' => '2041994', 'prefix' => '204', 'eid' => '2042071' }, { 'bid' => '2051996', 'prefix' => '205', 'eid' => '2052030' }, { 'bid' => '1971995', 'prefix' => '197', 'eid' => '1972031' }, { 'bid' => '1472004', 'prefix' => '147', 'eid' => '1472021' } ], 'PQR corp.' => [ { 'bid' => '1072003', 'prefix' => '107', 'eid' => '1072007' }, { 'bid' => '2011999', 'prefix' => '201', 'eid' => '2012020' } ] }; c:\test>