Useful Perl modules: Graph::Easy

Perl Module Graph::Easy offers a functionality to generate graphs consisting of various shaped nodes connected by edges (see the picture, for example). It can render graphs as ASCII, HTML, SVG or Graphviz. To quick start have a read that tutorial. It contains all needed information. The live demo of Graph::Easy is available here.

Talk with you PC

Perlbox Voice

If you’d like to control your Linux PC using voice commands than Perlbox Voice is what do you need. It’s a pure Perl application which features:

  • Text to speech (Thanks to the Festival speech synthesizer)
  • Voice control to open user specified applications. For example, if you say “Web”, the Perlbox-Voice Control will open the browser of your choice.
  • Desktop plugins to control your Linux desktop using only your voice. You can switch virtual screens, cycle through desktops, invoke the run dialog, quick lock the screen. Currently there is a plugin for KDE.
  • Custom commands are fully supported, and you can add commands on the fly.
  • ‘Pseudo Commands’ allow you to enter commands that the speaker should say. For example, if you say “Good morning”, the computer voice could say “And good morning to you”. It’s all up to you.
  • The best thing is that you don’t have to train the listening agent. The sphinx2 backend can be used by multiple people on the same machine without reconfiguration. It is also robust to background noise and ambient sound.
  • Easy to use and attractive interface built with Perl and Perl-Tk.
  • Uses to Festival Speech Synthesizer backend for text to speech and speaking functionality.

Improve Your Perl Programming

Brian Foy – the author of Mastering Perl and one of the famous perlmonks, wrote an article on the ONLAMP where described five ways to improve Perl programming:

  • Cleaning up your code – I also hate to read unformatted code -without tabs, proper style etc.
  • Use configuration – sure, my favorite module – Config::General.
  • Logging – log4perl should be used in all your applications.
  • Persistence – Brian suggested to use Storable or DBM::Deep but I prefer to use Cache::FileCache (it’s used in my module IMDB::Film to cache already retrieved web content).
  • Subclasses for applications – it’s good practice to implement a common functionality in the modules instead of keeping it in your script. This approach allows to have more structured application and reuse the same functionality in some other scripts.

So, generally I didn’t find anything new for me in those recommendations. I just confirmed my own point of view 🙂

Perl Oneliner: Recursive Search and Replace

I like Perl and I use it every day. It’s cool to make a simple scripts in one line to do some routine work. For example, my first Perl oneliner formats Apache log to be easy readable. Here is another good example of Perl onliner (it isn’t my actually). It makes a recursive search and replacement:
Perl -p -i -e 's/oldstring/newstring/g' grep -ril oldstring *

[via About: Perl]

Embperl and %ENV

Recently I faced with problem to incorrect displaying none-latin characters on the HTML page generated by Embperl. This happened because Embperl escapes all output symbols by default. To avid it it’s needed to specify a parameter EMBPERL_OUTPUT_ESC_CHARSET = 0. For web application is works fine because Embperl check %ENV and changes its parameters according to it. But if you need to run Embperl script from command line it doesn’t work. The solution is following: add into %ENV desired parameter

$ENV{EMBPERL_OUTPUT_ESC_CHARSET} = 0;

and pass additional parameter to the Embperl::Execute – use_env

Embperl::Execute( { inputfile => my-test-file.epl,
param => [<some data>],
use_env => 1,
});

use Net::Stomp

Some of you know about ActiveMQ – an open source (Apache 2.0 licensed) Java Message Service 1.1 (JMS) message broker packed with many enterprise features. One of the way to communicate with it from none-Java programm languages is STOMP (Streaming Text Orientated Messaging Protocol). STOMP is very simple and looks like HTTP-protocol.
Perl has at least two ways to communicate with ActiveMQ over STOMP:

Using ActiveMQ may help you to integrate your applications with others on Enterprise level.

Develop right CGI scripts

I came across Ovid’s CGI Course. It’s definitely good tutorial. Both experts and beginners will find there something interesting and helpful. I found the third part – Basic Security the most important and interesting for me. I’d like to add that you can find many useful extensions for CGI like CGI::Forms, for example. This module will do all routine work for you to produce web forms. Or here is a CGI::Framework – a simple-to-use, lightweight web CGI framework.
But notice that using plain CGI is defensible in case of simple web script. If you’re going to develop something serious have a look some Perl framework such Catalyst, Gantry or Maypole. They’re enough powerful to be a base of scalable and efficient web applications.