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

NAME

App::Spec::Tutorial - How to write an app with App::Spec::Run

LINKS

Options and parameters

See App::Spec::Argument for documentation and examples on how to define options and parameters.

GENERATOR

You can generate a boilerplate with appspec:

    appspec new --class App::Birthdays --name birthdays.pl

For documentation, look at appspec and App::AppSpec.

EXAMPLES

A minimal app called birthdays.pl

The smallest example would be the following app. It doesn't use subcommands. Please note that completion for apps without subcommands is still buggy.

birthdays.pl
    use strict;
    use warnings;
    package App::Birthdays;
    use base 'App::Spec::Run::Cmd';

    sub execute {
        my ($self, $run) = @_;
        my $date = $run->options->{date};
        my $output = <<"EOM";
    Birthdays $date:

    EOM
        $output .= "Larry Wall";
        if ($run->options->{age}) {
            $output .= " (Age: unknown)";
        }
        $output .= "\n";
        $run->out($output);
    }

    package main;
    use App::Spec;

    App::Spec->read("$Bin/birthdays.yaml")->runner->run;
birthdays.yaml

Short version:

    name: birthdays.pl
    title: Show birthdays
    appspec: { version: '0.001' }
    class: App::Birthdays
    options:
    - date=s =today --Date
    - age           --Show age

Long version:

    name: birthdays.pl
    title: Show birthdays
    appspec: { version: '0.001' }
    class: App::Birthdays
    options:
    - name: date
      type: string
      default: today
      summary: Date
    - name: age
      type: flag
      summary: Show age