The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

App::Spec - Specification for commandline apps

SYNOPSIS

WARNING: This is still experimental. The spec is subject to change.

This module represents a specification of a command line tool. Currently it can read the spec from a YAML file or directly from a data structure in perl.

It uses the role App::Spec::Role::Command.

The App::Spec::Run module is the framework which will run the actual app.

Have a look at the App::Spec::Tutorial for how to write an app.

In the examples directory you will find the app myapp which is supposed to demonstrate everything that App::Spec supports right now.

Your script:

    use App::Spec;
    my $spec = App::Spec->read("/path/to/myapp-spec.yaml");

    my $run = $spec->runner;
    $run->run;

    # this is equivalent to
    #my $run = App::Spec::Run->new(
    #    spec => $spec,
    #    cmd => Your::App->new,
    #);
    #$run->run;

Your App class:

    package Your::App;
    use base 'App::Spec::Run::Cmd';

    sub command1 {
        my ($self, $run) = @_;
        my $options = $run->options;
        my $param = $run->parameters;
        # Do something
        $run->out("Hello world!");
        $run->err("oops");
        # you can also use print directly
    }

METHODS

read
    my $spec = App::Spec->read("/path/to/myapp-spec.yaml");
load_data

Takes a file, hashref or glob and returns generated appspec hashref

    my $hash = $class->load_data($file);
build

Builds objects out of the hashref

    my $appspec = App::Spec->build(%hash);
runner

Returns an instance of the your app class

    my $run = $spec->runner;
    $run->run;

    # this is equivalent to
    my $run = App::Spec::Example::MyApp->new({
        spec => $spec,
    });
    $run->run;
usage

Returns usage output for the specified subcommands:

    my $usage = $spec->usage(
        commands => ["subcommand1","subcommand2"],
    );
generate_completion

Generates shell completion script for the spec.

    my $completion = $spec->generate_completion(
        shell => "zsh",
    );
make_getopt

Returns options for Getopt::Long

    my @getopt = $spec->make_getopt($global_options, \%options, $option_specs);
abstract, appspec, class, description, has_subcommands, markup, name, options, parameters, subcommands, title

Accessors for the things defined in the spec (file)

SEE ALSO

App::AppSpec - Utilities for App::Spec authors

LICENSE

This library is free software and may be distributed under the same terms as perl itself.