Beefy Boxes and Bandwidth Generously Provided by pair Networks
We don't bite newbies here... much

Re: Large Scale Perl Projects

by stvn (Monsignor)
on Oct 07, 2009 at 21:01 UTC ( #799819=note: print w/replies, xml ) Need Help??

in reply to Large Scale Perl Projects

What types of Perl projects are considered large scale ?

Well, Perl tends to be more concise then Java or C++, so what might be a several million LOC Java/C++ project might be a several hundred thousand LOC Perl project. And honestly LOC is not always a good measure since CPAN often times helps reduce the size of the local codebase by allowing a lot of functionality to be done by libraries.

What you really want to be asking is "does perl have the features necessary to handle large scale development?". To which the answer is a resounding "YES!". In order to do large scale development (IMO) you need at least the following language/toolchain features:

  • Namespacing

    Any time you have hundreds of thousands or millions of lines of code, you need to keep it properly organized. This is not just an issue of files and folders, but also of names. Perl has a really powerful package system that makes it really easy to both organize your code physically (files and folders) but also in the abstract (namespacing). Perl also has a lot of powerful tools on CPAN to help manage these namespaces with (ex: Sub::Exporter, Class::Inspector, Module::Pluggable, and all sort of other tools like these and more).

  • Seperate Compilation Units

    You might initially think this is not really relevant to Perl as much as it would be to a more traditional "compiled" language, but not having to build *everything* at once and the ability to dynamically load Perl modules is really important in large scale dev. This means you can better control the amount of coupling in your system and sub-systems since you can hot-load code at runtime.

  • Strong Testing Support

    Perl has a very strong testing culture, I would even suspect it is possibly the strongest. This means we have a TON of great testing tools as well. When doing large scale dev you want to be able to test the smaller components in isolation as well as within the context of the larger system or sub-system and then the final product. Perl has testing tools to make all this possible and then some.

whicn ones you have done?

At $work we have done perl projects that have gotten up into the hundred thousand LOC range and in some cases if you combined the separate projects for a single client (they are distinct systems but work together towards the same ultimate goal) we have hit the couple hundred thousand LOC range. I would consider these to be medium to medium-large scale projects.

For non-$work, I am the original author of the Moose framework, which is probably only a couple thousand LOC (much more if you include the test suite), but has a pretty large-scale scope.

I see CUFP, Snippets, and and other 'code's on but not a large scaled one to get appropriate ideas from.

Here is the list of companies that use Moose and therefore Perl (this was compiled for the upcoming new Moose website). Of course this is by no means definitive, nor do all these companies exclusively use Perl. What it does signify is that these companies have at least one non-trivial (you wouldn't use Moose for a trivial project) new (Moose is only 3 years old) and modern (Moose is one of the driving forces behind the modern perl movement) Perl project going on.

Best Practical
Infinity Interactive
Hearst Corporation
Omni Hotels
Open Data
Capitol Advantage
Cloudtone Studios
Shopzilla / BizRate
Current TV
The Genome Center at Washington University
Bioinformatics Group at University College London (UCL)
Hopefully this will give you the information you need.


Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://799819]
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others cooling their heels in the Monastery: (6)
As of 2017-04-27 10:20 GMT
Find Nodes?
    Voting Booth?
    I'm a fool:

    Results (502 votes). Check out past polls.