问题
Suppose I want to enter 2 command line parameters - source and destination. GetOptions allows the command line by checking only the first character of the argument name instead of the full string. How do I validate for the full arguments strings instead of just allowing its substrings to be passed?
Here's an example program:
my ($source,$dest);
GetOptions(
'from=s' => \$source,
'to=s' => \$dest
) or die "Incorrect arguments\n";
It accepts any of:
-from-fro-fr-f-to-t
However, I want it to accept only
-from-to
and fail if anything except those full words is passed.
How can I disallow the abbreviated options?
回答1:
By default, abbreviations are enabled. Disable auto_abbrev. Refer to Getopt::Long:
use warnings;
use strict;
use Getopt::Long qw(:config no_auto_abbrev);
my ($source,$dest);
GetOptions(
'from=s' => \$source,
'to=s' => \$dest
) or die "Incorrect arguements\n";
For example, when -fro is passed, this dies with the message:
Unknown option: fro
Incorrect arguements
回答2:
See "Configuring Getopt::Long" in the documentation:
auto_abbrevAllow option names to be abbreviated to uniqueness. Default is enabled unless environment variable
POSIXLY_CORRECThas been set, in which case "auto_abbrev" is disabled.
来源:https://stackoverflow.com/questions/43787024/getoptions-in-perl-does-not-validate-full-argument-names