#!/usr/bin/perl -w use strict; my $datafile = "stuff.csv"; my @fields; my $data; my $flag; open DATA, "<$datafile" or die "Could not open $datafile:$!\n"; while () { chomp(); # If the flag hasn't been set, this must be the header (first) line if (!$flag) { # Throw away the first two fields (#, username) in the header (undef, undef, @fields) = (split /\t/); $flag++; } else { my ($user, @userdata) = (split /\t/); my $i = 0; while ($i <= $#fields) { $data->{$user}{$fields[$i]} = $userdata[$i]; $i++; } } } close DATA;