#!/usr/bin/perl use strict; use warnings; use Data::Dumper; my $sdata = 'student.data'; my %students; open my $infile, '<', $sdata or die "Cannot open $sdata:$!\n"; while (my $line = <$infile>) { chomp($line); my ($id,$name,$f3,$f4) = $line =~ m/^(\d+)\s(.*)\s(..)\s(..)$/; $students{$name}{id} = $id; $students{$name}{f3} = $f3; $students{$name}{f4} = $f4; } close $infile; print Dumper(\%students); #### $VAR1 = { 'Smith Tom' => { 'f3' => 'RM', 'id' => '777666555', 'f4' => 'So' }, 'Johnson Lee' => { 'f3' => 'IE', 'id' => '555444333', 'f4' => 'Sr' }, 'Jones Mary' => { 'f3' => 'SD', 'id' => '111222333', 'f4' => 'Fr' } }; #### for my $student (sort {$students{$a}{id} <=> $students{$b}{id}} keys %students) { print "$student => $students{$student}{id}\n"; }