MooseX::Runnable - tag a class as a runnable application


Create a class, tag it runnable, and provide a run method:

    package App::HelloWorld;
    use Moose;

    with 'MooseX::Runnable';

    sub run {
       my $name = shift;
       say "Hello, $name.";
       return 0; # success

Then you can run this class as an application with the included mx-run script:

    $ mx-run App::HelloWorld jrockway
    Hello, jrockway.

MooseX::Runnable supports MooseX::Getopt, and other similar systems (and is extensible, in case you have written such a system).


MooseX::Runnable is a framework for making classes runnable applications. This role doesn't do anything other than tell the rest of the framework that your class is a runnable application that has a run method which accepts arguments and returns the process' exit code.

This is a convention that the community has been using for a while. This role tells the computer that your class uses this convention, and let's the computer abstract away some of the tedium this entails.




This is a script that accepts a MooseX::Runnable class and tries to run it, using MooseX::Runnable::Run.

The syntax is:

  mx-run <args for mx-run> -- Class::Name <args for Class::Name>

for example:

  mx-run -Ilib -- App::HelloWorld --args --go --here


  mx-run -Ilib +Persistent --port 8080 -Persistent -- App::HelloWorld --args --go --here
=head2 C<MooseX::Runnable::Run>

If you don't want to invoke your app with mx-run, you can write a custom version using MooseX::Runnable::Run.