in reply to Smooth perl upgrades

I usually don't have to deal much with the code that is using the perl, so my techniques are more geared to maintaining the trees. Whenever I build a package (yes *every* time), I build it with a version specific directory.
/usr/site/perl-5.8.0
(or something) Then the active perl is created with a symlink
/usr/site/perl -> perl-5.8.0
Finally, individual binaries are linked in /usr/local/bin
/usr/local/bin/perl -> /usr/site/perl/bin/perl
Now if I want to create a new perl, I build it in a standalone environment.
/usr/site/perl-5.8.2
Anyone that wants to can simply try this version out by using a /usr/site/perl-5.8.2/bin/perl in their program. When the time comes, we announce that the active version will change. Anyone that needs to use it can add an explicit version to their script. Then we activate it.
rm /usr/site/perl ln -s perl-5.8.2 /usr/site/perl
Most of the time, there's no additions/subtractions required for the links in /usr/local/bin. More work on the front end (especially the links into /usr/local/{bin,lib,..}), but very handy later. Now most scripts simply make use of the new code, while those with other requirements can easily use the old one.

In the past I've tried sharing modules between versions, but I've generally found it easier to simply rebuild all the modules for the new version. Costs a little diskspace.