... my %image; opendir(DIR, $dir) or die("Couldn't open dir $dir: $!"); foreach my $file (readdir(DIR)) { my $size = -s "$dir/file_found"; # Simpler size code if (exists($image{$size})) { handle_duplicate($image{$size}, $file); } else { $image{$size} = $file; } } #### ... foreach my $file (readdir(DIR)) { my $size = -s "$dir/$file"; push @{$image{$size}}, $file; } closedir(DIR); foreach my $list (values %image) { handle_duplicates(@{$list}) if (@{$list} > 1); }