Recent additions to CPAN

Invisible Servants

Perl programmers who upload a module or script to CPAN, often forget to specify the dependencies on other CPAN modules. Consequently, the installation fails for all users who do not already have the dependent modules on their systems by lucky coincidence. The CPAN Module::ScanDeps module [6] contains the script, which expects a script or module as an argument and outputs the dependencies for it.

Applied to the script presented in Listing 3, the output of: make2viz

looks like Figure 4. Who would have thought that deep in the belly of GraphViz::Makefile the IPC::Run::Win32Helper module has an important role as part of the digestive system? Linux systems are undoubtedly ill-advised to integrate this; if it were missing on the installation platform, however, Perl would abort the script in the compile phase because it can't find the seemingly required module.

Figure 4: The make2viz script draws on some hidden modules, as Module::ScanDeps quickly reveals.

Multiple-Course Meal

In many command-line utilities, the programmer expects some input by selection from a list of items by the user. For Perl scripts, CPAN offers several text terminal menu simulations. In the list of new module versions that I reviewed, my attention was grabbed by Term::Menus [7]; it offers a convenient programming interface for cases in which the user needs to select an entry from a potentially large list.

Listing 4 shows an example of a script in which the user has to select a file from his home directory. Failure to clean up for many years has led to no fewer than 73 files on my Linux box at home. They are unlikely to fit in a terminal window. As Figure 5 shows, Text::Menus displays 10 items at a time and allows the user to press D to scroll down and U to scroll up through the list.

Listing 4



Figure 5: Navigating in a very long list, here in the home directory of Perlmeister Mike Schilli, gets easier by using a convenient CPAN module.

By entering a number, the user finally selects an entry. In the menu script in Listing 4, this is then returned as result of the pick() function in the $selection variable. Term::Menus offers more features on top of that, such as multiple choices or submenus. These are all very handy when you consider that script programmers only need to invest in a few lines of code for this.

Finding Nuggets

A cursory review of the CPAN Recent list shows that it really is worthwhile panning for gold there. In addition to routine maintenance releases of popular modules, you will repeatedly find good ideas for more programming efficiency or entertaining information from the world of a lively Perl community glistening on the bottom of your pan.

"Zarathustra seeks creative collaborators; Zarathustra seeks fellow harvesters and celebrators: What has he to do with herds and herdsmen and corpses!"

The Author

Mike Schilli works as a software engineer with Yahoo! in Sunnyvale, California. He can be contacted at Mike's homepage can be found at

Buy this article as PDF

Express-Checkout as PDF
Price $2.95
(incl. VAT)

Buy Linux Magazine

Get it on Google Play

US / Canada

Get it on Google Play

UK / Australia

Related content

  • Perl: Heroku

    If you want to put together a web application in your favorite language and publish it for free, you will find Heroku a convenient helper. The service even allows you to bring your own web server.

  • Perl – Programming Tips

    If you have been programming for decades, you've likely gathered a personal bag of tricks and best practices over the years – much like this treasure trove from the Perlmeister.

  • Perl Snapshot: Debugging

    Some developers condemn the use of debuggers, but in many cases, a debugger is a programmer’s last hope. In this Month’s Perl Snapshot, we’ll look at Perl’s integrated debugger.

  • Perl: Collaborate with GitHub

    GitHub makes it easier for programmers to contribute to open source projects by simplifying and accelerating communications between project maintainers and people willing to contribute.

  • Perl: Travis CI

    A new service on picks up GitHub projects, runs new code through test suites, and notifies the owners if the build fails. Its API enables Perl scripts to gather historical build data, including who-broke-the-build tabulations.

comments powered by Disqus
Subscribe to our Linux Newsletters
Find Linux and Open Source Jobs
Subscribe to our ADMIN Newsletters

Support Our Work

Linux Magazine content is made possible with support from readers like you. Please consider contributing when you’ve found an article to be beneficial.

Learn More