Search code examples
perlgetopt-long

Using Perl's Getopt::Long, how can I prevent the module from trying to match ambiguous option names?


I am using the Getopt::Long module to process command line arguments.

The typical behavior of this module is we could pass -f instead of full name of the variable --file. At the same time if I have another command line variable --find, and if I supply only -f at the command prompt, it would return with an error:

Option f is ambiguous (file, find).

I was wondering how can we curb such ambiguous usage?

Thanks in advance.


Solution

  • Have a look at the Getopt::Long documentation:

    auto_abbrev

    Allow option names to be abbreviated to uniqueness. Default is enabled unless environment variable POSIXLY_CORRECT has been set, in which case auto_abbrev is disabled.


    Example:

    use strict;
    use warnings;
    use Getopt::Long qw(:config no_auto_abbrev);
    
    my ( $file, $fish );
    
    GetOptions( "file=s" => \$file, "fish=s" => \$fish );
    

    And the tests:

    $ perl test.pl -fi 24
    Unknown option: fi
    
    $ perl test.pl -fis 24
    Unknown option: fis