#!perl use strict; use warnings; use Data::Dump 'pp'; my %sidHash=(); open IN, '<', $taxFile or die "$taxFile couldn't be opened :$!\n"; while(){ chomp; next if /^Retid/; #skip header my ($sid,$state,$rate) = split /\s+/; push @{$sidHash{$sid}{state}}, $state; push @{$sidHash{$sid}{rate}} , $rate; } pp \%sidHash;