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

use strict;
use warnings;

use Getopt::Long;

sub new {
    my $class = shift;

    my $self = {
        cmd         =>  'usage',
        argv        =>  [],
    };

    return bless $self, $class;
}

sub parse_options {
    my $self = shift;

    local @ARGV;
    push @ARGV, @_;

    my $make_test;
    my $force;
    my $current;

    Getopt::Long::Configure( "bundling" );
    Getopt::Long::GetOptions(
            'v|version'     => sub { $self->{cmd} = 'version' },
            'h|help'        => sub { $self->{cmd} = 'help' },
            't|test'        => sub { $make_test++ },
            'f|force'       => sub { $force++ },
            'c|current'     => sub { $current++ },
            );

    if ( @ARGV ) {
        $self->{cmd}    = shift @ARGV;
        $self->{argv}   = \@ARGV;
    }

    require Enbld::Feature;
    Enbld::Feature->initialize(
            make_test   =>  $make_test,
            force       =>  $force,
            current     =>  $current,
            );

    return $self;
}

sub envbuild {
    my $self = shift;

    require Enbld::Message;
    Enbld::Message->set_verbose;

    require Enbld::Command;
    my $cmd = Enbld::Command->new(
            cmd         => $self->{cmd},
            argv        => $self->{argv},
            );

    $cmd->do;
}

1;