#! 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