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

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....

Obama, McCain and Campaign Financing

Obama and McCain had at one point both agreed to take public financing in September 2007 if they were their respective party's nominee. At the time, they were both long shots to get their party's nomination, but oddly enough they have both made it to the general election. As for their promise to take public financing, McCain decided to keep his promise while Obama opted to finance his campaign through his own fundraising. In doing so, he became the first ever presidential candidate to forego public financing during the general election. In February 2008, McCain started criticizing Obama for not keeping his promise to take public financing. How legitimate are McCain's accusations? That's what I wanted to discuss. According to The New York Times campaign finance page , Obama and McCain raised $401m and ~$150m, respectively, prior to earning their party's nomination. The public financing package is $84m over two months (Sept-Nov). For McCain, whose averaged $7....

2001 Recession Deferred for 2008?

Most people remember the Dot-Com bubble of the 1990s that peaked in 2000 before bursting in 2001-2003. Considering how the NASDAQ composite lost more than 60% of its value by 2001 alone, the country was about to go into a recession. The 9/11 attacks made things worse too. As the impact of 9/11 and Dot-Com bust were about to pull the country into a recession, another bubble came to the rescue. It was the housing bubble that deferred a sure recession and kept the US in an era of faux prosperity. It gave Bush a reason to soldier on with flawed economic policies as the housing bubble gave the impression that the good economic progress of the Clinton years were being sustained through Bush's years. This time though, there does not appear to be another bubble ready to bail the US out of the recession it is in. After suffering through the I.T. and housing bubbles in just a decade, I don't think investors and people in general will be adventurous enough to create another bubbl...