use strict; use warnings; my %database; my ($id,$user,$password,$display); while(){ chomp; ($id,$user,$password,$display)=split /\|/; $database{$id}=[] unless exists $database{$id}; #avoid primary key duplications. push @{$database{$id}}, ($user, $password,$display); } foreach my $id (sort keys %database){ print "ID $id:\nINFO: @{$database{$id}}\n"; print "\n"; } __DATA__ UserID001|username1|password1|displayname1| UserID002|username2|password2|displayname2| UserID003|username3|password3|displayname3|