Glad you posted this before I replied to the other, you've fixed this up well. There are still some warts, though.
- Don't use $a and $b for scratch variables; they are sacred to sort.
- Lock your files or use a locked semaphore file. You have races if more than one instance of this runs (e.g. if it is fired by suspicious tcp connections)
- When you die, put $! in die's argument list (without any "\n"). That will give you diagnostics you might not get otherwise.
- grep can clean up your last while loop, and maybe help the logic, too.
- use strict; use warnings;
- Take a look at the &Digest::MD5::addfile(\*HANDLE) method
- It will take O(N2) to compare all those digests the way you do it. How about making a hash with the digest as key, and checking for existance in the hash?
You can turn this into a thing of beauty. Good luck, and have fun.
After Compline,
Zaxo