use strict; use warnings; use Data::Dumper; open (S,"<","sample.data") or die $!; my @file=; my %samplehash; my @fields; my ($key,$subkey); for ( my $i=0;$i<=$#file;$i++) { chomp $file[$i]; @fields=split /\s+/,$file[$i]; $samplehash{$fields[1]}{$fields[2]}=$fields[0]; } foreach $key (keys %samplehash) { print "\n $key = ". $samplehash{$key}; foreach $subkey (keys %{$samplehash{$key}}) { print "\t$subkey = $samplehash{$key}{$subkey} "; } } close S;