#!/usr/bin/env perl my %files = qw( a 111 b 222 c 333 d 333 e 222 f 222); my %sizes_seen; # file sizes that have already been seen my %sizes_matched; # sizes that have already been matched, # and the last filename with that size for my $file (keys %files){ my $size = $files{$file}; # readability variable if( $sizes_matched{$size} ){ print "$sizes_matched{$size} => $size\n"; $sizes_matched{$size} = $file; } elsif( $sizes_seen{$size} ){ print "$sizes_seen{$size} => $size\n"; $sizes_matched{$size} = $file; } $sizes_seen{$size} = $file; } # finish printing the remaining matches for my $s (keys %sizes_matched){ print "$sizes_matched{$s} => $s\n"; }