The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/env perl
package Hello;
use 5.010;
use Moose;

with 'MooseX::Getopt::Usage';

has verbose => ( is => 'ro', isa => 'Bool',
    documentation => qq{Say lots about what we do} );

has greet => ( is => 'ro', isa => 'Str', default => "World",
    documentation => qq{Who to say hello to.} );

has times => ( is => 'rw', isa => 'Int', required => 1,
    documentation => qq{How many times to say hello} );

sub getopt_usage_config {
    return ( 
        attr_sort => sub { $_[0]->name cmp $_[1]->name },
        format => "Usage: %c [OPTIONS]",
        headings => 0,
    );
}

sub run {
    my $self = shift;
    say "Printing message..." if $self->verbose;
    say "Hello " . $self->greet for (1..$self->times);
}

package main;
Hello->new_with_options->run;