use warnings; use strict; use Data::Dump::Streamer; my @data = ; my %dataPos; chomp @data; push @{$dataPos{$data[$_]}}, $_ for 0 .. $#data; Dump (\%dataPos); __DATA__ WELL TOTAL QUALITY POSITION NAME TOTAL QUALITY POSITION NAME #### $HASH1 = { "" => [ 3 ], "POSITION NAME" => [ 2, 5 ], "TOTAL QUALITY" => [ 1, 4 ], WELL => [ 0 ] };