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

Distribution of Wealth in the US

The rich get richer and the poor get poorer. I heard this statement quite a bit lately particularly in light of the sub-prime mortgage and general housing crisis in the US. The country has enjoyed significant economic prosperity and both Clinton and Bush boasted economic growth under their reign. Unfortunately, the beneficiaries of the economic boom are not people from all economic backgrounds, but rather the top 10%. To make things worse, Bush gave tax cuts mainly targeting the top 10%. Being more of a numbers guy, I always wanted showing the validity of the-rich-get-richer-n-the-poor-get-poorer statement. Thanks to Wikipedia , I have finally found it!! Both the mean and median net worth of families for the bottom 50% of the population has remained absolutely flat while the 75th-90th percentile see a decent growth and the top 10% enjoy the most appreciation on their net worth. So, if you factor in inflation, the-rich-get-richer-n-the-poor-get-poorer probably holds true. The g...

IPtables, SVN, and NMAP

I reviewed some material on IPtables, SVN, and NMAP just for the sake of keeping my mind busy. Here are some useful notes: IPtables - best resource found at HERE SVN - best, as in the quickest and simplest intro could be found HERE NMAP - I honestly don't see in using it for more than port-scanning in a few instances. Anyway, here are a few other options that might come in handy at some point. nmap -sT/sS/ sX/sF/...[-P0] IPADDRESS(range) == to check which ports are open nmap -sP IPADDRESS(range) == a simple ping scan for availability nmap -sO IPADDRESS(range) == check what IP protocols are available nmap -sV IPADDRESS(range) == a scan with version detection Other useful flags: -O == detects OS, part of -v (verbosity) flag as well -A == detects OS and versions -v == request high verbosity/detail -F == performs a fast scan of only a few common ports Installing Perl modules Perl modules may be installed using the CPAN module or from source. SOURCE...

Reasons to Vote for Barack Obama

Not that I am eligible to vote or anything ... but if I could, I would vote for Barack Obama for the following reasons. He listens to experts . He has assembled a group of smart and practical intellectuals to advise him on all sorts of topics. Hillary has her own agenda and ambition which appears to keep her from entertaining any "elitist" agenda. He is a good manager. The way he hired very intelligent people to run a nearly flawless campaign to beat an established and seemingly unbeatable opponent in Hillary Clinton is commendable. He really knows how to surround himself with a smart group of people who can get things done and that is exactly what this country needs. Hillary hired people on the basis of their loyalty and counted on friends of the Clintons to win her the nomination. Unfortunately, all that influence and political capital could not overcome the grassroots movement Obama initiated. He is not an ideologue . That allows him to make good decisions for this...