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.

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