Как можно ответить на флаг --help с помощью Getopt :: Std?

Я хочу, чтобы мой сценарий выводил справочное сообщение, когда он запускается с параметром командной строки --help. Согласно Getopt::Std документации, этот подпункт должен сделать трюк:

#!/usr/bin/env perl
use strict;
use warnings;
use 5.014;
use Getopt::Std;

sub HELP_MESSAGE {
    say "HELP MESSAGE";
}

Но ничего не печатает. Я также попытался добавить это из любопытства:

for (@ARGV) {
    HELP_MESSAGE() if /--help/;
}

Это действительно работает, но кажется довольно небрежным. Я знаю, что использовать флаг -h было бы довольно просто, но я хотел бы иметь и то, и другое.


person Daniel    schedule 22.02.2014    source источник


Ответы (1)


В документации Getopt :: Std говорится

Если - не является распознанной буквой переключения, getopts() поддерживает аргументы --help и --version. Если main::HELP_MESSAGE() и / или main::VERSION_MESSAGE() определены, они вызываются; ...

Так что попробуйте это:

#!/usr/bin/env perl

use strict;
use warnings;
use 5.014;
use Getopt::Std;

$Getopt::Std::STANDARD_HELP_VERSION = 1;
our $VERSION = 0.1;

getopts('');       # <<< You forgot this line, and `getopt()` DOES NOT work

sub HELP_MESSAGE {
    say "HELP MESSAGE";
}

Тестовый забег:

$ ./t00.pl --help
./t00.pl version 0.1 calling Getopt::Std::getopts (version 1.07),
running under Perl version 5.16.3.
HELP MESSAGE
person Lee Duhem    schedule 22.02.2014
comment
Кажется, проблема заключалась в пропавшем getopts(). В моем исходном скрипте (то, что я опубликовал в своем комментарии, было скелетом) я использовал getopt() без s. После перечитывания документации разница проясняется. - person Daniel; 24.02.2014