use warnings; use strict; my %data; ; # Discard header while () { chomp; my ($tick, @cols) = split /\s*\|\s*/; my %comp; @comp{qw(name price cap ind)} = @cols; $data{$tick} = { %comp }; } use Data::Dumper; $Data::Dumper::Sortkeys=1; print Dumper(\%data); __DATA__ TICKER| CO. NAME| PRICE| MARKET CAP| INDUSTRY ABC | ABC Co.| 15.5| 5000| Industrials AB | Alpha Beta| 12| 2500| Materials DOZ | ZZZZZ| 5.05| 2800| Telecom DX | DX Co.| 77.2| 12000| Industrials DXX | DXX Co.| 50.25| 9000| Utilities #### $VAR1 = { 'AB' => { 'cap' => '2500', 'ind' => 'Materials', 'name' => 'Alpha Beta', 'price' => '12' }, 'ABC' => { 'cap' => '5000', 'ind' => 'Industrials', 'name' => 'ABC Co.', 'price' => '15.5' }, 'DOZ' => { 'cap' => '2800', 'ind' => 'Telecom', 'name' => 'ZZZZZ', 'price' => '5.05' }, 'DX' => { 'cap' => '12000', 'ind' => 'Industrials', 'name' => 'DX Co.', 'price' => '77.2' }, 'DXX' => { 'cap' => '9000', 'ind' => 'Utilities', 'name' => 'DXX Co.', 'price' => '50.25' } };