Rather than rolling your own usage handling, consider the core module Pod::Usage. Format that really long help documentation print line as POD, and you're ready to go. POD turns your useful header comments into a manpage using perldoc.
Another alternative is to use a "here-document" (see perlop).
Add use warnings;.
You could check the return status of getopts and die if you do not want the user to pass bogus options.
Update:
scalar @ARGV < 0
I do not think this will ever evaluate to 'true' because I'm not sure if it is possible for an array to have a negative number of elements. Maybe
scalar @ARGV == 0? | [reply] [Watch: Dir/Any] [d/l] [select] |
Ahh yes, that should definitely be ==!
| [reply] [Watch: Dir/Any] |
and thank you very much for linking that stuff related to usage handling - I had no idea that even existed.
| [reply] [Watch: Dir/Any] |
As you get acquainted with Pod::Usage, consider the normal layout of manual pages, and use it. You'll find that Pod::Usage::pod2usage provides the means to display just the SYNOPSIS portion or the whole manual. As for testing that the user gives you exactly one command-line "option":
#!/usr/bin/perl
=head1 NAME
name_of_utility_or_module
=head1 SYNOPSIS
brief example/template/summary of typical use(s), e.g.:
prog_name -d
prog_name -h
prog_name -p foobar
=head1 DESCRIPTION
Paragraphs that describe the purpose, usage and various
behaviors of the utility or module in suitable detail...
=cut
use strict;
use Getopt::Std;
use Pod::Usage;
my %opt;
getopts('dp:h', \%opt);
pod2usage(2) if (keys %opt != 1); # die here if too many options were
+ given
print "ok, here we go...\n";
if ( $opt{d} ) {
# do this..
}
if ( $opt{p} ) {
# do that...
}
if ( $opt{h} ) {
pod2usage(-exitstatus => 0, -verbose => 2); # exit & show full man
+ page
}
| [reply] [Watch: Dir/Any] [d/l] |
Thank you very much for that reply. That was extremely helpful! I checked the perldoc page, but to me it wasn't really clear how to implement the whole POD thing. I'll give it a try!
| [reply] [Watch: Dir/Any] |
| [reply] [Watch: Dir/Any] |