--- Tels <[EMAIL PROTECTED]> wrote:
> There is a time when you have to abandon old stuff and just use the modern 
> thing. I would be curious what the reason for v5.6 are - and if not most of 
> them are of the "we are to lazy to upgrade", "we don't want to", "it always 
> worked" etc :)

Well, since you asked:  There are several reasons why the upgrade from 5.6 to 5.8 
hasn't happened
yet.  First, the team that I am working on has a quarter million lines of Perl code, 
and that's
not counting the template layer.  Given that there are many different teams, you can 
get an idea
of the scale of software that we routinely work with.

Ignoring the other teams for the moment, here are some of the problems that I 
personally ran into
when trying to upgrade our software to 58.  Please note that I am not attempting to 
justify
*anything* that I am about to write.  I am merely describing the state of the software 
as I found
it when I started working here.

1.  Many CPAN modules do not quite fit our requirements, so we have to subclass them 
or fork the
code.  There are very few CPAN modules that we have not done this to in one way or the 
other. 
When we upgraded to 58, many of those broke outright because they had been so 
radically altered. 
(In large part, this was often done because we used early versions of modules written 
years ago. 
We needed features that people hadn't even thought of back then.)

2.  Hash ordering is now guaranteed to be random (unless you specify different compile 
time
options to Perl, something I chose not to do).  Many of our tests assume that hash 
order is
deterministic -- which it appeared to be prior to 58 (remember, "not guaranteed to 
return in a
particular order" is not the same as "non-deterministic").  I had to rewrite much of 
our test
suite (which takes around two hours to run!) to find and fix all of these.

3.  Extensive use of pseudo-hashes.

4.  Internally, some source filters are used which automatically built prototypes for 
subs.  They
work well, but caused many strange problems.

5.  Localizing tied arrays and hashes is broken in 5.8.  We tie and localize %ENV.

6.  Because of sloppy programming, many tests emitted warnings and a few failed 
intermittently. 
Given that I had to *guarantee* that none of those problems were caused by 58 and the 
test suite
takes forever to run, I had to do this repeatedly to catch all intermittant failures 
and trap all
warnings.  This was a huge amount of programming time.

7.  Of course, 58 is not binary compatible with 56, meaning many modules must be 
recompiled.  This
introduced plenty of other problems (don't even get me started about the module that 
now relies on
Apache internals and thus cannot be used or required except in a mod_perl 
environment!!!)

That list is not comprehensive, but it gives you an idea of what I faced.

Here's the kicker:  I've seen a lot of production Perl code and while you might cringe 
at some of
the things I described, this is, hands down, the best production Perl I've had the joy 
to work
with.  Any shop that has a code base anywhere close to the size of ours could very 
well have a
hell of a lot more work to do than I did.  Further, given that larger code bases 
usually have more
customer requests, upgrading to 58 might seem like a low-priority when a customer is 
dangling a
hundred thousand dollars in front of you.  Frankly, I was surprised I had support for 
the project.
 If I was not a new programmer who they were struggling to figure out what to do with, 
I probably
would *not* have gotten approval.  As it stands, I did the upgrade months ago and 
we're still
waiting to install it.

Cheers,
Ovid

=====
Silence is Evil            http://users.easystreet.com/ovid/philosophy/indexdecency.htm
Ovid                       http://www.perlmonks.org/index.pl?node_id=17000
Web Programming with Perl  http://users.easystreet.com/ovid/cgi_course/

Reply via email to