Skip to main content

Parsing Commandline Options in Perl

Anyone who has tried to parse command-line options in Perl knows how messy the process gets with increasing number of options. Luckily, there are some modules that the whole process more manageable. The tutorials I am learning from are http://systhread.net/texts/200704optparse.php#one and http://aplawrence.com/Unix/perlgetopts.html.

Without using a special Perl module, options can be parsed as follows (credit to http://systhread.net/texts/200704optparse.php#one)

while ( my $arg = shift @ARGV ) {
if ( $arg eq '-F' ) {
$F_FLAG = 1;
} elsif ( $arg eq '-f' ) {
$FILE_ARGUMENT = shift @ARGV;
} elsif ( $arg eq '-u' ) {
usage();
} else {
usage();
exit 1;
}
}

Ultimately, using the getopt module should be done if it is available, why reinvent the wheel? Here is an example of using the Getopt module:

use Getopt::Std;
...
getopt ('f:uF');

die "Usage: $0 [ -f filename -u ]\n"
unless ( $opt_f or $opt_u );

if ($opt_f) {
my $filename = shift @ARGV;
} elsif ($opt_u) {
usage();
exit 0;
}

Definitely shorter and compact.

A.P. Lawrence shows an even more succinct example which demonstrates the power of the getopts package.
#!/usr/bin/perl
# script is "./g"
use Getopt::Std;
%options=();
getopts("o:d:fF",\%options);
# like the shell getopt, "o:" and "d:" means d and o take arguments
print "-o $options{o}\n" if defined $options{o};
print "-d $options{d}\n" if defined $options{d};
print "-f $options{f}\n" if defined $options{f};
print "-F $options{F}\n" if defined $options{F};
print "Unprocessed by Getopt::Std:\n" if $ARGV[0];
foreach (@ARGV) {
print "$_\n";
}
Well, this means we don't have to worry about the order in which the flags are entered.  Plus, creating one-liners to check the validity of arguments seems simple.

Comments

Popular posts from this blog

Slow Acroread Startup in OpenSuSe 11.0

It takes more than 30 seconds for acroread to load on my Opensuse machine the first time and the startup time gets shorter in subsequent attempts. Why? This is not the first time I have come across this problem of slow application startups in OpenSuse. Apparently a lot of people had encountered this problem and they found a simple solution - uninstalling the version of acroread that comes with OpenSuse and installing one from Adobe site yourself. Fortunately, that prescription seems to have solved the problem. My acroread startup time is a few seconds now. Why does a very good Linux distribution like OpenSuse with its wide support and following make so many of these mistakes?!?! Over the years, I have seen Suse/OpenSuse sending buggy distributions that make you wonder if they do much testing before releasing their distro. Here are a few bugs I have come across: The extremely slow startup of Openoffice in OpenSuse 10.0 was one of the reasons I switched to Fedora Core for a while...

The Pervasive Mac vs. Windows vs. Linux Analogy

I'm sure everyone has seen the Mac vs. PC ads on TV where the Mac appears to be confident while th PC is in denial about its deficiencies. Missing from that picture is Linux which is robust, but seeks no attention because it has no commercial ambitions. This Mac vs. PC vs. Linux model can serve as a analogy for many things/phenomena. I would like to make a list of those analogies here. For example, The New York Times recently characterized Hillary as a PC and Obama as a mac on the basis of the design of their websites. The analogy would also work if you think of Hillary as the status quo much like Windows, and Obama as the new thing with great promise, cachet and appeal like the newly reborn mac. It is not obvious who would play the role of Linux, but my choice would be Ron Paul. He has some bold and independent ideas along with a very loyal following even though he has no chance of winning. PC Mac Linux Candidate Hillary Clinton Barack Obama Ron Paul States Northeast West Co...

Movies for the Idle Mind

Wondering how I fill my idle hours and days? Among other things, I watch a few movies here and there. Here is a list I downloaded using Bittorrent and am watching at the pace of a movie non-enthusiast. The rating for the movies I have already watched are shown while it is left empty for the others. Woody Allen:: # MOVIE MY RATING ( /10) 1 Annie Hall 10 2 Manhattan 8 3 Hannah and Her Sisters 9 4 Love and Death 8 5 Deconstructing Harry 6 6 Match Point 5 7 Antz 8 8 Play it Again, Sam 8 9 Husbands and Wives 10 The Purple Rose of Cairo 11 Everything You Wanted to Know about Sex, But Were Afraid To Ask OTHER:: # MOVIE MY RATING ( /10) 1 Citizen Kane 7 2 Eternal Sunshine of a Spotless Mind 9 3 The Pursuit of Happyness 6 4 About Schmidt 5 5 The Royal Tenenbaums 10 6 Rushmore 7 7 The Big Lebowski 9 8 Monty Python and the Holy Grail 7 9 Ed Wood 8 10 Broken Flowers 8 11 Basketball Diaries 8 12 Crash 13 The Clockwork Orange 14 City of God 15 The Science of Sleep 16 La Dolce Vita 17...