in reply to built-ins sometimes iterating over a list, sometimes not
One way to simplify your test is to get rid of the extra map:
Usage() && exit if grep{not exists $args->{$_}}@mandatory;
An alternate scenario could involve Getopt::Declare, which allows you to specify if an option is required or not (negating the need for this particular test). For example:
#!/usr/bin/perl -w use strict; use Getopt::Declare; my $args = Getopt::Declare->new(<<'SPEC'); -x <x:n> x coord (real) [required] -y <y:n> y coord (real) [required] -z <z:n> z coord (real) {print "Processing in three dimensions\n"} SPEC #rest of program... __END__
Running the above without -x or -y options causes an error message regarding the missing option. For free you also get -help which will print out a usage statement (for free you'll also get a slight speed hit on loading the module). Note: there are hard tabs between the option specs on the left and the option descriptions on the right (see the docs for formal specification requirements).
|
|---|