use strict; use warnings; use Data::Dumper; my $test = qq(/etc/skel/test); my ($id,$name,$hash); open (my $test1, "+<", $test) or die "file '$test' was not opened $!"; my (%HoA,$HoA); while(<$test1>) { s/^\s+|\s+$//g; y/^\S|\S$//d; ($id,$name)=split(/\|/,$_); push @{$HoA{$id}}, $name; } print Dumper(\%HoA); for my $i (sort keys %HoA) { print "$i -- @{ $HoA{$i} }\n"; } __DATA__ $ cat -etu test 1|Michael$ 1|Alex$ 1|Bob$ 1|Pete$ 2|Bob$ 2|Andre$ 2|David$ 2|Alex$ 3|Pete$ $ $