I've got programs on my laptop that are also on my colocated machine and on my basement server. I'm positive I've hacked in new features on one machine or another, but synchronizing them has been a nightmare. Perhaps I should develop my code on one machine. Give a unique ID to each released program, embedding it as POD or just a comment. Then with a master list of versions and upgrade paths from the development server, it's simple to extract IDs from everything in ~gnat/bin and see what needs to be updated.
Is there a Truer Perl way to do this? I do not want to make every program into a module with a $VERSION and unique package name. That is the True Java way. Any Truer Perl way works on programs qua programs, not "a program is an instance of an Application object that has been subclassed to override the Run method
Hmm, I guess this epitomizes the Unix and Perl philosophy for me. If there's a More Perl way to do it than I described, then it does so by removing one layer of complexity by reusing an existing feature. For example, MD5ing $VERSION and the first comment in the source instead of assigning a unique identifier, or hooking into CPAN.pm/CPANPLUS to register, install, and upgrade programs.
How many times have you seen a nasty solution to a problem, wondered "what the hell are they doing?", and then proceeded to strip away unnecessary obfuscation after meaningless cargo-cult programming artifact until finally you arrive at a simple elegant expression of what it was you wanted to do all along? Ok, maybe not that often, but it's an experience I recognize from several times in my life as a programmer. I guess one of the pleasures of going through hell several times is that you begin to learn the landmarks. "Ah yes, I remember this bubbling lake of sulphur, so that must be Sisyphus's rock rolling down that hill