news and views of the Perl programming language

brian d foy is the author of Mastering Perl, now available in its second edition, as well as several other Perl books. As the founder of Perl mongers, he's been active in the Perl community for almost 20 years.

Perl's so big now that it's almost impossible to pay attention to everything
going on. Instead of reading the thoughts of me, just one person, on the
current state of Perl, why not gather several major players who can cover many
areas that you may not have noticed? I've collected some voices from parts of
the large and diverse Perl community to highlight a small fraction of
everything going on, from community development, hard core coding, the job
market, and various problem domains. Although not definitive, their combination
makes a good summary.

Randal Schwartz is the original author of Programming perl and Learning Perl, along with numerous other Perl credits. He's the current host of FLOSS Weekly.

Perl started as a Unix shell replacement to help sysadmins get more productive with less risk and a flatter learning curve (you didn't have to learn the quirks of dozens of small utilities, just the quirks of One Larry Wall).

But then along came the web, and "scripts" could be used to provide interactive web pages, and Perl became the darling language of the web, first with "cgi-lib.pl", and then with CGI.pm, and later with larger frameworks like Mason and Catalyst.

Of course, Perl's scripting abilities also matured, and the ability to scale Perl programs with modern testing and OO frameworks (like Moose) empowered programmers to write 10-line scripts and 100,000-line applications using the same core language features: a distinctive advantage.

Perl 5 development stagnated a bit, trigging the whole "Perl 6" revival, and the relationship between Perl 5 and Perl 6 is still not understood by most people outside the direct Perl community (nor even by some who are *in* the community). But with the establishment of the quarterly point release, and the annual major releases, Perl 5 seems to have gotten firmly back in the saddle of modern development again. And while Perl 6 continues to be developed and redesigned, parts of it are already quite useful for early adopters.

Karen Pauley was a founding member of the Belfast Perl Mongers, a
volunteer with the YAPC Europe Foundation, and is the
President of The Perl Foundation.

For me, Perl is a reason for creating community systems to support Perl itself. The Perl Foundation doesn't write the Perl language, we don't influence its direction; instead we work with the Perl community to organize funding, volunteers, marketing, and legal counsel.

The Perl 5 Core Maintenance fund was created in June 2011, in collaboration with some of Perl 5's most generous supporters, such as Booking.com and craigslist Charitable Fund. Our goal was to pay a few key volunteer developers to spend more of their time working on the maintenance and development of Perl 5. So far we have raised over $280,000 allowing us to compensate Perl internals experts including Nicholas Clark and Dave Mitchell to do more than they could on an unpaid basis.

The Perl Foundation, with help from our volunteers and donors, will continue to seek ways to strengthen the language, its community, and the F/OSS world in the coming years.

Steffen is a physicist-turned-software developer. A long time
contributor to Perl and author of many Perl modules on the
CPAN, he currently works at Booking.com where he manages
software infrastructure development..

With Booking.com, Perl powers one of the most successful, profitable e-commerce companies on the planet. Perl is used throughout our stack from the web layer to mission-critical, highly-available infrastructure. We love it because its flexibility aligns with our aggressive pace of development on our code base of millions of lines of code. We believe that the language's versatility has given us a competitive advantage.

Outside of Booking.com, I am an individual contributor to Perl and the CPAN. Thus I have had the chance to directly support users in more than just a handful of Fortune 500 companies including major banks as well as the IT, automotive, and chemical industries. Perl is used in critical systems of many companies albeit usually in much less prominent roles. It is a humble work horse and truly deserves its reputation as a Swiss Army Chainsaw.

At Booking.com, we believe that one of Perl's great strengths is its community. Unlike many corporations, we maintain strong symbiotic ties to this development community. Many of our technical staff are active contributors to Perl and Perl modules on the CPAN. We encourage our developers to publish their code. This has both helped with getting our name out to potential future employees and improved the quality of our software overall.

Perl 5 is entering its fifth year of fixed-schedule releases, meaning that the first few releases on the yearly plans are now out of their supported lifetime. With the release support policy solidly in place, we've begun to hammer out exactly how we handle Perl's iffiest behaviors: deprecated and experimental features. Enumerating just which features are experimental let us get an idea of what we mean when we say something is experimental, which has led to a means to add new features to Perl without as much fear of getting locked in to bad ideas.

We've gotten a number of exciting new features in the latest perl builds, as experiments. Lexical subroutines, regexp character sets, and postfix dereferencing are the three I'm most excited about, and the prospect of experimental subroutine signatures still looks good.

Over the next few releases, I'm hoping we'll see improvement continue in three main areas: Perl 5's already-excellent Unicode support, the useful but troublesome PerlIO system, and the ability to provide annotations for improving performance.

Joel Berger has a Ph.D. in Physics from the University of Illinois at Chicago. He is currently employed writing software for a major financial institution.

Perl is my language of choice for almost any task. In my research I routinely found that the flexibility of Perl allowed me to structure a script or simulation in the way that I was thinking about the problem, not the way the language wanted me to think about it. Modern tools like the Moose object framework give Perl the ability to model the most complex set of interdependent classes (as often arises in Physics) with ease. Combine that with the massive CPAN module archive, from which you can find tools to transform nearly any data format, manipulate and analyze data, or do nearly any other task.

In my spare time, I contribute to the Mojolicious web framework, which brings the trendy non-blocking web to Perl, a robust and stable language (and the only language with CPAN). Mojolicious comes with lots of functionality like a non-blocking UserAgent (which is also the backbone of the extensive test framework), DOM parser, WebSockets, JSON, and a powerful template system, all built in.

Sawyer X is one of the core developers on Dancer, a Perl web framework inspired by Ruby's Sinatra.

Perl is often remembered as the original language of the web. It had good CGI support and was the go-to language for any web programming. The CGI protocol had its issues and so was replaced in time by FastCGI, embedded interpreters in the web servers (mod_perl, mod_php, etc.), and servers implemented in the application language.

While you weren't watching, Perl has developed a common protocol, binding web servers, web frameworks, and web applications: PSGI. PSGI allows any web server to support any web framework and web application. It allows any web framework to support any server, and any user to use any framework on top of any server. In two words: anything goes.

On one hand new frameworks appeared (Dancer, Mojolicious, Amon2) and mature frameworks (Catalyst) started supporting PSGI, and on the other hand web servers written entirely in Perl grew into existence, such as Starman, Twiggy, Corona, and more.

Stevan Little created Moose, a post-modern object system for Perl 5. He's working on adding this to the Perl core language.

Perl has had object oriented capabilities since the first release of Perl 5 almost 20 years ago. Since then, best practices have come and gone, along with a sea of modules on the CPAN to help programmers implement those best practices. Although many OO styles still abound, the current Modern Perl movement has come to settle around the style of OO implemented by the Moose module.

Moose itself is based heavily on the OO features that have been designed for Perl 6, along with input from several other languages including LISP, Ruby, Smalltalk and others. Moose brings not only support for basic class based OO programming, but it also brings deep meta programming capabilities, and the idea of "Roles" to Perl OO programming. Roles - which were originally derived from the Smalltalk community where they were called "Traits" - provide a means of code re-use similar to mix-ins but with an added degree of compositional safety through the use of conflict detection. Moose was originally released in 2006 and in the past 7 years more 2,100 CPAN modules have been released which depend upon it.

David Mertens is a Visiting Assistant Professor at Dickinson College and
a contributor to PDL and Prima.

I have been using Perl for my scientific computing since roughly 2007. Prior to Perl I wrote the bulk of my scientific code in C++ and Matlab. My first exposure to Perl was due to its well known string processing capabilities, but I quickly realized that it was a well designed general purpose programming language. After programming in Perl, Matlab felt cludgy and C++ felt verbose. Once I discovered the PDL (Perl Data Language), I switched all of new scientific computing to Perl.

My most exciting work with Perl has been at the interface of PDL and other modules. A few years ago I discovered the Prima graphical toolkit and eventually wrote PDL-based methods for fast and flexible drawing to a Prima canvas. As my familiarity with Prima has grown, I have begun using it to write interactive simulations for talks and lectures.

Time and again I found other Perl developers had solved 90% of my problem, leaving the last and most exciting 10% to me. From numerical simulations to web servers to interactive lectures, I can always find the right Perl tool for the job, and the right Perl glue to put it all together.

Dave Cross is the owner of Magnum
Solutions Ltd., a Perl training and consultancy company based in
London. He founded London.pm, the first Perl Monger
group outside of North America. Dave blogs about Perl at Perl Hacks.

I've been running Perl training courses for six or seven years. The demand for these courses has never been higher than I've seen over the last year, coming from all kinds of companies--financial services companies, media giants, dotcoms and many others.

The nature of those enquiries has been changing. Previously I would get enquiries about generic beginners, intermediate or advanced Perl courses, these days it is just as likely to be a request for training about a specific Perl module like Moose or DBIx::Class. These enquiries are coming from companies who have been using Perl for many years but who finally seem to be getting the message that Perl has changed over the last ten years and that by keeping the knowledge of their Perl teams up to date they will retain the competitive advantage that was the reason for them choosing Perl in the first place.

Part of this, I'm sure, is driven by the recruitment market in London. There are a lot of companies trying to employ a relatively small number of Perl programmers. This means that the best programmers can be picky and only work for companies that are only using the most modern tools.

Andrew Shitov is a Perl enthusiast working with the language since 1998, the organiser of 30+ local and international Perl events in 8 countries, including two YAPC::Europe conferences. Moscow.pm leader in 2007-2013.

Perl is not the only programming language in the Universe any more, and thus it might feel that developers do not consider it as the only option. This, on the one hand, is a very pleasant time for improving the language, but on the other hand, Perl suffers from the fact that the language core developers might not feel the responsibility for keeping their product perfect, compatible and suitable for the need of modern programming. Perl faces the danger coming from inside of itself: we have seen a number of annoying incompatibilities introduced in recent releases, not counting the delay of Perl 6 which made Perl less competitive. All in all, Perl is now in a very comfortable position to be able to flush all the bad stuff and be re-born.

[from brian: since Andrew is active in the Russian Perl community, I wanted to publish his response in Russian too.]

Neil has managed research and development teams for startups and multinationals. He's currently working on a startup that uses Perl, and also likes to work on projects related to CPAN curation. He started programming in Perl in 1993.

The Perl Authors Upload Server (PAUSE), our gateway to CPAN, has been seeing more and more action. 844 people created a new account in 2013 (second only to 2012, with 858). Of those 844 new users, 389 have released something on CPAN to date. Overall, 1803 of the 11k PAUSE users released something in 2013 (2012's total was 1759). Those 1803 users released 7440 different distributions in 2013, the best year ever. Read more about CPAN in 2013 on the CPAN Report.

Recent upgrades to the awesome CPAN Testers mean we see results within an hour of uploading a module. Within days of releasing a distribution we get feedback on how well our code tests out on a wide range of configurations. Roughly one million reports are uploaded each month.

PrePAN is a new website where we can describe module ideas and get feedback before we commit a specific design to CPAN.

Questhub has a growing community of Perl developers who use it to manage their backlog of Perl projects ('quests'). Template quests encourage you to contribute to Perl, get involved with the community, improve your distributions, and help others with theirs.

The adoption list identifies stale distributions that are of value to CPAN (e.g. being used by other distributions), but might have lost their primary developer. If you're looking for a project, consider taking on something from the list.

The Year in Perl 2013

Welcome to 2014, Perl mongers, fans, hackers, and dabblers. It's been a big year in our quirky little language. The community has grown. The CPAN has expanded. Bugs have been squashed, conferences attended, and projects released. Here's a cross-section of what happened that you may have missed.

January 2013

At the Perl Oasis conference, Stevan Little gave a talk entitled Perl is not Dead, it is a Dead End about forking Perl to experiment with new design and implementation ideas. The talk included an announcement of Moe, a reimplementation of parts of Perl. By September, Moe would go dormant.

Shawn Moore formally deprecated Any::Moose. If you need a lightweight OO system which can upgrade to Moose when you use Moose features, use Moo instead.

March 2013

A flaw in Perl's rehashing mechanism (resizing hash tables when adding new keys) was corrected in the five most recent stable releases of Perl. Perl 5.18 would make hash key order slightly more random, exposing long-standing bugs in several programs. 5.18 also introduced lexical subroutines, which will be very useful.

Michael Schwern announced a quick start guide for perl5i. perl5i is an experimental distribution of Perl which includes a lot of syntax-warping modules that may or may not influence core development in the future.

December 2013

December is Advent season in the Perl world. That means lots of Advent calendars, with a post a day for 24 (or 25) days. Some of these calendars include the Perl Advent calendar, the Catalyst Advent calendar, and (new this year) the Futures Advent calendar. Even though Advent season is over, that's still enough articles to fill the rest of the month with good reading.

The Dancer developers sadly couldn't get their Advent calendar going (for happy, family reasons, so they get a pass this year), but they did announce the Dancer 2 0.11 release.

Suppose you're working on a large application in Perl. Your code is in
multiple files with multiple packages, and you've built your application in
layers. You have a data storage layer, a framework to manage control flow, a
layer for business rules, and at least one form of user interface.

Imagine someone discovers a bug. When a user attempts to log in but mistypes
her email address—using a comma instead of dot, for example—the web
site crashes. She sees a nearly empty "500 Server Error" page instead of the
attractive error pages the designer created and the logs show only that
something went wrong. Your custom error handler didn't even get
called.

If that sounds familiar, you may have had a week like I did.

Back when Perl and Java seemed like two poles of the professional software
development axis, we Perl programmers often teased Java programmers about
Java's propensity to emit page long backtraces whenever anything somewhere went
wrong. Over a decade later, my views have grown to include a little more
nuance. The problem isn't backtraces per se; the problem is Java's
call stacks are so deep and the stack traces so verbose that real problems may
be obscured in irrelevant details.

Perl code sometimes goes too far the other direction. It makes sense to use
Carp's carp() to
warn about the dubious use of code in libraries from the point of view of the
caller, but modern Perl applications tend to grow beyond a single program
calling to a few libraries. Our libraries depend on other libraries and
something can go wrong in one layer but only produce an error in another layer.
Sometimes it's nice to have the option to enable verbose backtraces for
warnings and errors only temporarily, during debugging, without modifying any
of your code.

That's what Carp::Always does. If
you can reproduce the error in a test case (whether a formal test script or a
small, standalone program), launch the program with the command line option
-MCarp::Always to get a verbose backtrace on warnings or errors.

(The -M flag tells perl to load a named module,
just as if you'd written use Carp::Always; in your program.)

For bonus debugging powers, I like to use command lines of the form:

$ perl -MCarp::Always my_test_case.pl 2> log; less log; rm log

... so that the backtrace goes to the less pager, where I can
scroll up and down and search. When I quit the pager, the temporary file goes
away so it doesn't clutter up my directory.

By tracking all control flow to the point of the error, I found the problem more quickly. You can, of course, solve this problem in multiple ways, including attaching a debugger to a running process, but when that's not an option and when you can reproduce the exception or warning in a small test file, forcing a full backtrace can be very helpful.