We did a transation from 5.6.0 to 5.8.2 a while back. The basic process was:
- Install new Perl in a distict set of libraries. We installed a basic set of CPAN modules in the separate libraries as well. We built the list by looking at the heavy-hitters (run often, company's bottom line depends on it, etc) and grabbing the modules they needed
- Published to the World that the New Perl was out there and that They Should Give It A Try. "If you have any missing modules, let us know and we will pull them from CPAN." People ran their codes from a command-line invocation using the explicit name (/usr/local/bin/perl5.8.2 -I /usr/local/lib....) and reported back on the oddities.
- Got Feed back, Added additional Modules to the list. Got more feed-back.
- At the end of the month, we sent out a Note to the World: "We will begin phasing over to 5.8.2 over the next three months. Here is the proposed order of march...."
- We waited for two weeks to get more feed-back on the proposal and then started.
- We changed the she-bang line to point to the 5.8.2 libraries as the first step of the conversion. For an awful lot of our code, that was the only change needed. For the couple or three programs that needed it, code changes were made and a new name assigned (SysA and SysA.5.8.2, for example). (Note: all code went into CVS; if we needed the old version, we had it. The new code was checked in on a separate branch; and *all* maintenance was done twice. A lot of the development groups instituted a partial freeze for the quarter.)
- As soon as all modules in a system were converted and tested, the new code was put into production.
- At the end of the 'Conversion' period we found we had touched about 85% of our code base. (About 6,000 packages and stand-alone scripts in almost 200 distict systems.) The remaining code fell into the following buckets:
- The script was no longer in production, just no one had noticed.
- It was a one-shot and would need to be severely breathed on before we used it again. (A Database fixup routine, for example.)
- The Owner told us that "It can't break, I coded it to avoid all of that fancy stuff." (Honest. We got *that* in writing. Good thing, too.)
- Orphans -- no one was admiting to be the Party Responsible. Management decided to assign ownership in a couple of cases. For the others, we took the 'wait and see' position.
- The actual 'conversion' occured on a Monday in the middle of the month, and in the middle of a billing cycle. We renamed the old Perl libraries to .../perl.5.6.0 and changed the symlinks to point to the new kids. We picked Monday to give us the maximum amount of time to sort things out before the weekend.
- There were a couple of hits right out of the box, but no real show-stoppers. They were fixed and the rest of the week ran cleanly.
- The next week we got a shot at the billing period-end codes. One or two more 'issues' cropped up, again nothing that a ten minute patch to the she-bang followed by a perl -c couldn't handle.
- A month later, we ran through the quarter-end codes; same thing, most were OK, there were a couple of hiccups, which we fixed and went on.
- After the quarter-enders had been fixed, a note went out: "Here are the programs that have not been looked at the the Conversion. After this date(xx/xx/xxxx), any conversion work we do will have to have a Project Account to charge to."
- On The Date we:
- Archived the 5.6.0 Perl and libraries with a six month retention period.
- Did a mass CVS checkout and ran a code to alter the she-bang line, returning it to "/usr/local/bin/perl", and then merged everything back into the the CVS head.
- Did all this on a Saturday; the only time we had to have folks work outside of normal business hours.
- We Waited.
- At the end of the week, we declared it a Wrap and went out to the Local Pub for a celebration. Management bought, and was slightly horrified by the amount of beer four people can consume and still be able to hit a triple on a dart-board.
- There were still a few things that needed addressing later. (It turned out that the Accounting Folks had been mis-led about the Year-End codes being just a special run of the Quarter-enders that we keep for ten years rather than one). But by and large, things went cleanly.
In summary, we wandered through 6K Pieces of Perl (averaging 300 lines per program/module) in a little over four months (four people, normal working hours, except for one weekend at the end), and ended up still talking to one another. The usual caveats about mileage and performance apply.
I can't address the 'going crazy' part (there are those who say that I started out crazy, so....).
----
I Go Back to Sleep, Now.
OGB