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

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

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