Как вы создаете опции уровня приложения, используя Perl App :: Cmd? - PullRequest
6 голосов
/ 13 августа 2010

Обновление от FMc

Я вознаграждаю за этот вопрос, потому что я ломаю голову над той же проблемой.Перефразируя вопрос, как реализовать опции уровня приложения (те, которые применяются ко всей программе, script.pl), в отличие от тех, которые применяются к отдельным командам (search в этом примере).

Оригинальный вопрос

Как я могу использовать App :: Cmd , чтобы создать подобный интерфейс

script.pl --config <file> search --options args

?

Я могу сделать:

./script.pl search --options args
./script.pl search args
./script.pl search --options

То, что я пытаюсь достичь, это получить опцию для файла конфигурации, например так:

./script.pl --config file.conf search --options args

Я смотрел на App :: Cmd :: Tutorial на cpan, но пока мне не повезло заставить его работать.

1 Ответ

6 голосов
/ 26 мая 2011

Вы можете указать глобальные параметры в App :: Cmd , как показано ниже.Нам нужны три файла:

script.pl :

use Tool;
Tool->run;

Tool.pm :

package Tool;
use strict; use warnings;
use base 'App::Cmd';

sub global_opt_spec {
    ['config=s' => "Specify configuration file"];
}

1;

и Инструмент / Команда / search.pm :

package Tool::Command::search;
use strict; use warnings;
use base 'App::Cmd::Command';

sub opt_spec {
    ["option" => "switch on something"],
}

sub execute {
    my ($self, $opt, $args) = @_;

    warn "Running some action\n";
    warn 'Config file = ' . $self->app->global_options->{config}, "\n";
    warn 'Option      = ' . $opt->{option}, "\n";
}

1;

В примере показано, как определить глобальную опцию и получить к ней доступ из действия search.

...