use 5.12.0; use warnings; my %HoA; while ( ) { my @got = split; push @{ $HoA{ $got[0] } }, $got[2]; } say "$_ - @{$HoA{$_}}" for sort keys %HoA; __DATA__ aaa bbb 123 aaa ccc 234 aaa ddd 345 bbb ccc 456 bbb ddd 567 ccc ddd 678