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

LaTeX Greeting Cards - New and Improved

... Disaster has struck and the post I had spent a whole day on has vanished because of some incompatibility between Blogger and Microsoft SkyDrive embedding. I will try to recap the contents of that post briefly anyways. The original gcard style sheet is intended for making a small greeting card that gets folded twice, as shown in my previous post . I would like to modify the style sheet to produce a card that gets folded only once. It will have some content on the outside as well as inside. In addition, I want to add features like background image and other figures to make the cards more appealing. Going from a double fold to a single fold That requires that you make the following changes in the file gcard.sty. 1) Double the panel height. %\setlength{\panelheight}{(\paperheight-2\gctopmargin-2\gcbottommargin)/2} \setlength{\panelheight}{(\paperheight-2\gctopmargin-2\gcbottommargin)} 2) Push the inside pages to their respective location next page. %\begin{textblock*}{\panelwidth...

Correlation Between Taxes and Social/Economic Programs

I have always wondered if the taxes people pay correlate with the availability of social and economic programs and safety nets, not to mention the military programs that protect them. This idea comes in light of the notion that Europeans are highly taxed compared to their American counterparts, but they seem to have access to free (or almost free) education and health care while the US provides neither. The Europeans live and work at a more leisurely pace than Americans and they have the comfort of knowing that their government has put safety nets in case a disaster. The Europeans do a lot to ensure that all their citizens have comparable opportunities, and thus you are less likely to see a huge gap between the poor and the rich. Perhaps the lack of incentive to excel has stifled entrepreneurship and innovation in Europe to some extent. In fact, Europe has historically high unemployment rates than the US and the size of government there is significantly larger than that of the US....

Microsoft Gone Wild

NBC and Microsoft have formed an intricate partnership in which Microsoft serves to expand and maintain NBC's presence in the online news and entertainment market while promoting its products. NBC online integrates many of Microsoft's products. MSNBC is co-owned by GE's NBC universal and Microsoft. I have no problem with the partnership, except for the way Microsoft pushes people to use Microsoft products while other alternatives do just as well or better. Let me provide some examples. You can't access NBC online videos unless you have a Windows media plugin. What about using Flash like everybody else. If you want to access Olympics games online at NBC Olympics, you better be using a Windows or a Mac because Microsoft does not have a Linux version of the Silverlight plugin that it is pushing hard in competition with Adobe Flash, the industry standard. Suppose you are using Windows, you pay a huge penalty for not using Internet Explorer!! Try watching videos with In...