MooseX::Runnable - tag a class as a runnable application
Create a class,
tag it runnable,
and provide a run
method:
package App::HelloWorld; use feature 'say'; use Moose; with 'MooseX::Runnable'; sub run { my ($self,$name) = @_; 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.
Your class must implement run
. It accepts the commandline args (that were not consumed by another parser, if applicable) and returns an integer representing the UNIX exit value. return 0
means success.
mx-run
This is a script that accepts a MooseX::Runnable
class and tries to run it, using MooseX::Runnable::Run
.
The syntax is:
mx-run Class::Name mx-run <args for mx-run> -- Class::Name <args for Class::Name>
for example:
mx-run -Ilib App::HelloWorld --args --go --here
or:
mx-run -Ilib +Persistent --port 8080 -- App::HelloWorld --args --go --here
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.
MX::Runnable
is designed to be extensible; users can run plugins from the command-line, and application developers can add roles to their class to control behavior.
For example, if you consume MooseX::Getopt, the command-line will be parsed with MooseX::Getopt
. Any recognized args will be used to instantiate your class, and any extra args will be passed to run
.
Many of the plugins shipped are unstable; they may go away, change, break, etc. If there is no documentation for a plugin, it is probably just a prototype.
http://github.com/jrockway/moosex-runnable
Jonathan Rockway <jrockway@cpan.org>
Copyright (c) 2009 Jonathan Rockway
This module is Free Software, you can redistribute it under the same terms as Perl itself.