#!/usr/bin/perl
 
use strict;
use Getopt::Long;
 
# declare option-related vars
my $bVerbose;
my $somevalue;
 
# allow "-se" to mean "-s -e", also makes single-letter options case sensitive
Getopt::Long::Configure ("bundling"); 
 
# stop parsing after the first non-option; needed to let you pass options 
# in the host command
Getopt::Long::Configure ("require_order");
 
# parse command line options
exit unless GetOptions(
	"help" => sub { usage(); },
	"verbose|v" => \$bVerbose,
	"number|n=i" => sub { $somevalue = $_[1]; },
	"file|f=s" => sub {
		my $filename = $_[1];
		open FP, "< $filename" or die "$filename: $!\n";
		for (<FP>) { ... }
		close FP;
	},
);
 
if (!@ARGV)  { usage(); }
 
 
 
########################################################################
 
sub usage {
	my $me = $0; $me =~ s/.*[\/\\]//;
 
	print <<EOL;
myapp by Tyler Bletsch
  version $version
 
Description of what it does.
 
Syntax:
  $me [Options] <Arg1> [Arg2] ...
 
Options:
     --help             : Print this message.
  -n,--number <N>       : Something with the number <N>
  -v,--verbose          : Emit extra info to the console during execution
 
EOL
	exit;
}