{"id":7172,"date":"2022-12-20T19:35:43","date_gmt":"2022-12-20T22:35:43","guid":{"rendered":"http:\/\/lode.uno\/linux-man\/index.php\/2022\/12\/20\/moosexgetopt-man3\/"},"modified":"2022-12-20T19:35:43","modified_gmt":"2022-12-20T22:35:43","slug":"moosexgetopt-man3","status":"publish","type":"post","link":"https:\/\/lode.uno\/linux-man\/2022\/12\/20\/moosexgetopt-man3\/","title":{"rendered":"MooseX::Getopt (man3)"},"content":{"rendered":"<h1 align=\"center\">MooseX::Getopt<\/h1>\n<p> <a href=\"#NAME\">NAME<\/a><br \/> <a href=\"#VERSION\">VERSION<\/a><br \/> <a href=\"#SYNOPSIS\">SYNOPSIS<\/a><br \/> <a href=\"#DESCRIPTION\">DESCRIPTION<\/a><br \/> <a href=\"#METHODS\">METHODS<\/a><br \/> <a href=\"#SEE ALSO\">SEE ALSO<\/a><br \/> <a href=\"#SUPPORT\">SUPPORT<\/a><br \/> <a href=\"#AUTHOR\">AUTHOR<\/a><br \/> <a href=\"#CONTRIBUTORS\">CONTRIBUTORS<\/a><br \/> <a href=\"#COPYRIGHT AND LICENSE\">COPYRIGHT AND LICENSE<\/a> <\/p>\n<hr>\n<h2>NAME <a name=\"NAME\"><\/a> <\/h2>\n<p style=\"margin-left:11%; margin-top: 1em\">MooseX::Getopt \u2212 A Moose role for processing command line options<\/p>\n<h2>VERSION <a name=\"VERSION\"><\/a> <\/h2>\n<p style=\"margin-left:11%; margin-top: 1em\">version 0.74<\/p>\n<h2>SYNOPSIS <a name=\"SYNOPSIS\"><\/a> <\/h2>\n<p style=\"margin-left:11%; margin-top: 1em\">## In your class <br \/> package My::App; <br \/> use Moose; <br \/> with &#8216;MooseX::Getopt&#8217;; <br \/> has &#8216;out&#8217; => (is => &#8216;rw&#8217;, isa => &#8216;Str&#8217;, required => 1); <br \/> has &#8216;in&#8217; => (is => &#8216;rw&#8217;, isa => &#8216;Str&#8217;, required => 1); <br \/> # &#8230; rest of the class here <br \/> ## in your script <br \/> #!\/usr\/bin\/perl <br \/> use My::App; <br \/> my $app = My::App\u2212>new_with_options(); <br \/> # &#8230; rest of the script here <br \/> ## on the command line <br \/> % perl my_app_script.pl \u2212in file.input \u2212out file.dump<\/p>\n<h2>DESCRIPTION <a name=\"DESCRIPTION\"><\/a> <\/h2>\n<p style=\"margin-left:11%; margin-top: 1em\">This is a role which provides an alternate constructor for creating objects using parameters passed in from the command line.<\/p>\n<h2>METHODS <a name=\"METHODS\"><\/a> <\/h2>\n<p style=\"margin-left:11%; margin-top: 1em\"><b>&#8220;new_with_options (%params)&#8221;<\/b> <br \/> This method will take a set of default %params and then collect parameters from the command line (possibly overriding those in %params) and then return a newly constructed object.<\/p>\n<p style=\"margin-left:11%; margin-top: 1em\">The special parameter &#8220;argv&#8221;, if specified should point to an array reference with an array to use instead of @ARGV.<\/p>\n<p style=\"margin-left:11%; margin-top: 1em\">If &#8220;GetOptions&#8221; in Getopt::Long fails (due to invalid arguments), &#8220;new_with_options&#8221; will throw an exception.<\/p>\n<p style=\"margin-left:11%; margin-top: 1em\">If Getopt::Long::Descriptive is installed and any of the following command line parameters are passed, the program will exit with usage information (and the option\u2019s state will be stored in the help_flag attribute). You can add descriptions for each option by including a <b>documentation<\/b> option for each attribute to document.<\/p>\n<p style=\"margin-left:11%; margin-top: 1em\">\u2212? <br \/> \u2212\u2212? <br \/> \u2212h <br \/> \u2212\u2212help <br \/> \u2212\u2212usage<\/p>\n<p style=\"margin-left:11%; margin-top: 1em\">If you have Getopt::Long::Descriptive the &#8220;usage&#8221; parameter is also passed to &#8220;new&#8221; as the usage option.<\/p>\n<p style=\"margin-left:11%; margin-top: 1em\"><b>&#8220;ARGV&#8221;<\/b> <br \/> This accessor contains a reference to a copy of the @ARGV array as it originally existed at the time of &#8220;new_with_options&#8221;.<\/p>\n<p style=\"margin-left:11%; margin-top: 1em\"><b>&#8220;extra_argv&#8221;<\/b> <br \/> This accessor contains an arrayref of leftover @ARGV elements that Getopt::Long did not parse. Note that the real @ARGV is left untouched.<\/p>\n<p style=\"margin-left:11%; margin-top: 1em\"><b>Important<\/b>: By default, Getopt::Long will reject unrecognized <i>options<\/i> (that is, options that do not correspond with attributes using the &#8220;Getopt&#8221; trait). To disable this, and allow options to also be saved in &#8220;extra_argv&#8221; (for example to pass along to another class\u2019s &#8220;new_with_options&#8221;), you can either enable the &#8220;pass_through&#8221; option of Getopt::Long for your class: &#8220;use Getopt::Long qw(:config pass_through);&#8221; or specify a value for MooseX::Getopt::GLD\u2019s &#8220;getopt_conf&#8221; parameter.<\/p>\n<p style=\"margin-left:11%; margin-top: 1em\"><b>&#8220;usage&#8221;<\/b> <br \/> This accessor contains the Getopt::Long::Descriptive::Usage object (if Getopt::Long::Descriptive is used).<\/p>\n<p style=\"margin-left:11%; margin-top: 1em\"><b>&#8220;help_flag&#8221;<\/b> <br \/> This accessor contains the boolean state of the \u2212\u2212help, \u2212\u2212usage and \u2212\u2212? options (true if any of these options were passed on the command line).<\/p>\n<p style=\"margin-left:11%; margin-top: 1em\"><b>&#8220;print_usage_text&#8221;<\/b> <br \/> This method is called internally when the &#8220;help_flag&#8221; state is true. It prints the text from the &#8220;usage&#8221; object (see above) to &#8220;STDOUT&#8221; (and then after this method is called, the program terminates normally). You can apply a method modification (see Moose::Manual::MethodModifiers) if different behaviour is desired, for example to include additional text.<\/p>\n<p style=\"margin-left:11%; margin-top: 1em\"><b>&#8220;meta&#8221;<\/b> <br \/> This returns the role meta object.<\/p>\n<p style=\"margin-left:11%; margin-top: 1em\"><b>&#8220;process_argv (%params)&#8221;<\/b> <br \/> This does most of the work of &#8220;new_with_options&#8221;, analyzing the parameters and &#8220;argv&#8221;, except for actually calling the constructor. It returns a MooseX::Getopt::ProcessedArgv object. &#8220;new_with_options&#8221; uses this method internally, so modifying this method via subclasses\/roles will affect &#8220;new_with_options&#8221;.<\/p>\n<p style=\"margin-left:11%; margin-top: 1em\">This module attempts to <small>DWIM<\/small> as much as possible with the command line parameters by introspecting your class\u2019s attributes. It will use the name of your attribute as the command line option, and if there is a type constraint defined, it will configure Getopt::Long to handle the option accordingly.<\/p>\n<p style=\"margin-left:11%; margin-top: 1em\">You can use the trait MooseX::Getopt::Meta::Attribute::Trait or the attribute metaclass MooseX::Getopt::Meta::Attribute to get non-default command-line option names and aliases.<\/p>\n<p style=\"margin-left:11%; margin-top: 1em\">You can use the trait MooseX::Getopt::Meta::Attribute::Trait::NoGetopt or the attribute metaclass MooseX::Getopt::Meta::Attribute::NoGetopt to have &#8220;MooseX::Getopt&#8221; ignore your attribute in the command-line options.<\/p>\n<p style=\"margin-left:11%; margin-top: 1em\">By default, attributes which start with an underscore are not given command-line argument support, unless the attribute\u2019s metaclass is set to MooseX::Getopt::Meta::Attribute. If you don\u2019t want your accessors to have the leading underscore in their name, you can do this:<\/p>\n<p style=\"margin-left:11%; margin-top: 1em\"># for read\/write attributes <br \/> has &#8216;_foo&#8217; => (accessor => &#8216;foo&#8217;, &#8230;); <br \/> # or for read\u2212only attributes <br \/> has &#8216;_bar&#8217; => (reader => &#8216;bar&#8217;, &#8230;);<\/p>\n<p style=\"margin-left:11%; margin-top: 1em\">This will mean that MooseX::Getopt will not handle a \u2212\u2212foo parameter, but your code can still call the &#8220;foo&#8221; method.<\/p>\n<p style=\"margin-left:11%; margin-top: 1em\">If your class also uses a configfile-loading role based on MooseX::ConfigFromFile, such as MooseX::SimpleConfig, MooseX::Getopt\u2019s &#8220;new_with_options&#8221; will load the configfile specified by the &#8220;\u2212\u2212configfile&#8221; option (or the default you\u2019ve given for the configfile attribute) for you.<\/p>\n<p style=\"margin-left:11%; margin-top: 1em\">Options specified in multiple places follow the following precedence order: command-line overrides configfile, which overrides explicit new_with_options parameters.<\/p>\n<p style=\"margin-left:11%; margin-top: 1em\"><b>Supported Type Constraints<\/b> <i><br \/> Bool<\/i><\/p>\n<p style=\"margin-left:17%;\">A <i>Bool<\/i> type constraint is set up as a boolean option with Getopt::Long. So that this attribute description:<\/p>\n<p style=\"margin-left:17%; margin-top: 1em\">has &#8216;verbose&#8217; => (is => &#8216;rw&#8217;, isa => &#8216;Bool&#8217;);<\/p>\n<p style=\"margin-left:17%; margin-top: 1em\">would translate into &#8220;verbose!&#8221; as a Getopt::Long option descriptor, which would enable the following command line options:<\/p>\n<p style=\"margin-left:17%; margin-top: 1em\">% my_script.pl \u2212\u2212verbose <br \/> % my_script.pl \u2212\u2212noverbose<\/p>\n<p style=\"margin-left:11%;\"><i>Int<\/i>, <i>Float<\/i>, <i>Str<\/i><\/p>\n<p style=\"margin-left:17%;\">These type constraints are set up as properly typed options with Getopt::Long, using the &#8220;=i&#8221;, &#8220;=f&#8221; and &#8220;=s&#8221; modifiers as appropriate.<\/p>\n<p style=\"margin-left:11%;\"><i>ArrayRef<\/i><\/p>\n<p style=\"margin-left:17%;\">An <i>ArrayRef<\/i> type constraint is set up as a multiple value option in Getopt::Long. So that this attribute description:<\/p>\n<p style=\"margin-left:17%; margin-top: 1em\">has &#8216;include&#8217; => ( <br \/> is => &#8216;rw&#8217;, <br \/> isa => &#8216;ArrayRef&#8217;, <br \/> default => sub { [] } <br \/> );<\/p>\n<p style=\"margin-left:17%; margin-top: 1em\">would translate into &#8220;includes=s@&#8221; as a Getopt::Long option descriptor, which would enable the following command line options:<\/p>\n<p style=\"margin-left:17%; margin-top: 1em\">% my_script.pl \u2212\u2212include \/usr\/lib \u2212\u2212include \/usr\/local\/lib<\/p>\n<p style=\"margin-left:11%;\"><i>HashRef<\/i><\/p>\n<p style=\"margin-left:17%;\">A <i>HashRef<\/i> type constraint is set up as a hash value option in Getopt::Long. So that this attribute description:<\/p>\n<p style=\"margin-left:17%; margin-top: 1em\">has &#8216;define&#8217; => ( <br \/> is => &#8216;rw&#8217;, <br \/> isa => &#8216;HashRef&#8217;, <br \/> default => sub { {} } <br \/> );<\/p>\n<p style=\"margin-left:17%; margin-top: 1em\">would translate into &#8220;define=s%&#8221; as a Getopt::Long option descriptor, which would enable the following command line options:<\/p>\n<p style=\"margin-left:17%; margin-top: 1em\">% my_script.pl \u2212\u2212define os=linux \u2212\u2212define vendor=debian<\/p>\n<p style=\"margin-left:11%; margin-top: 1em\"><b>Custom Type Constraints<\/b> <br \/> It is possible to create custom type constraint to option spec mappings if you need them. The process is fairly simple (but a little verbose maybe). First you create a custom subtype, like so:<\/p>\n<p style=\"margin-left:11%; margin-top: 1em\">subtype &#8216;ArrayOfInts&#8217; <br \/> => as &#8216;ArrayRef&#8217; <br \/> => where { scalar (grep { looks_like_number($_) } @$_) };<\/p>\n<p style=\"margin-left:11%; margin-top: 1em\">Then you register the mapping, like so:<\/p>\n<p style=\"margin-left:11%; margin-top: 1em\">MooseX::Getopt::OptionTypeMap\u2212>add_option_type_to_map( <br \/> &#8216;ArrayOfInts&#8217; => &#8216;=i@&#8217; <br \/> );<\/p>\n<p style=\"margin-left:11%; margin-top: 1em\">Now any attribute declarations using this type constraint will get the custom option spec. So that, this:<\/p>\n<p style=\"margin-left:11%; margin-top: 1em\">has &#8216;nums&#8217; => ( <br \/> is => &#8216;ro&#8217;, <br \/> isa => &#8216;ArrayOfInts&#8217;, <br \/> default => sub { [0] } <br \/> );<\/p>\n<p style=\"margin-left:11%; margin-top: 1em\">Will translate to the following on the command line:<\/p>\n<p style=\"margin-left:11%; margin-top: 1em\">% my_script.pl \u2212\u2212nums 5 \u2212\u2212nums 88 \u2212\u2212nums 199<\/p>\n<p style=\"margin-left:11%; margin-top: 1em\">This example is fairly trivial, but more complex validations are easily possible with a little creativity. The trick is balancing the type constraint validations with the Getopt::Long validations.<\/p>\n<p style=\"margin-left:11%; margin-top: 1em\">Better examples are certainly welcome \ud83d\ude42<\/p>\n<p style=\"margin-left:11%; margin-top: 1em\"><b>Inferred Type Constraints<\/b> <br \/> If you define a custom subtype which is a subtype of one of the standard &#8220;Supported Type Constraints&#8221; above, and do not explicitly provide custom support as in &#8220;Custom Type Constraints&#8221; above, MooseX::Getopt will treat it like the parent type for Getopt purposes.<\/p>\n<p style=\"margin-left:11%; margin-top: 1em\">For example, if you had the same custom &#8220;ArrayOfInts&#8221; subtype from the examples above, but did not add a new custom option type for it to the &#8220;OptionTypeMap&#8221;, it would be treated just like a normal &#8220;ArrayRef&#8221; type for Getopt purposes (that is, &#8220;=s@&#8221;).<\/p>\n<p style=\"margin-left:11%; margin-top: 1em\"><b>More Customization Options<\/b> <br \/> See &#8220;Configuring Getopt::Long&#8221; in Getopt::Long for many other customizations you can make to how options are parsed. Simply &#8220;use Getopt::Long qw(:config other_options&#8230;)&#8221; in your class to set these.<\/p>\n<p style=\"margin-left:11%; margin-top: 1em\">Note in particular that the default setting for case sensitivity has changed over time in Getopt::Long::Descriptive, so if you rely on a particular setting, you should set it explicitly, or enforce the version of Getopt::Long::Descriptive that you install.<\/p>\n<h2>SEE ALSO <a name=\"SEE ALSO\"><\/a> <\/h2>\n<table width=\"100%\" border=\"0\" rules=\"none\" frame=\"void\" cellspacing=\"0\" cellpadding=\"0\">\n<tr valign=\"top\" align=\"left\">\n<td width=\"11%\"><\/td>\n<td width=\"1%\">\n<p style=\"margin-top: 1em\">\u2022<\/p>\n<\/td>\n<td width=\"5%\"><\/td>\n<td width=\"83%\">\n<p style=\"margin-top: 1em\">MooseX::Getopt::Usage, an extension to generate man pages, with colour<\/p>\n<\/td>\n<\/tr>\n<tr valign=\"top\" align=\"left\">\n<td width=\"11%\"><\/td>\n<td width=\"1%\">\n<p>\u2022<\/p>\n<\/td>\n<td width=\"5%\"><\/td>\n<td width=\"83%\">\n<p>MooX::Options, similar functionality for Moo<\/p>\n<\/td>\n<\/tr>\n<\/table>\n<h2>SUPPORT <a name=\"SUPPORT\"><\/a> <\/h2>\n<p style=\"margin-left:11%; margin-top: 1em\">Bugs may be submitted through the <small>RT<\/small> bug tracker <https:\/\/rt.cpan.org\/Public\/Dist\/Display.html?Name=MooseX-Getopt> (or bug\u2212MooseX\u2212Getopt@rt.cpan.org <mailto:bug-MooseX-Getopt@rt.cpan.org>).<\/p>\n<p style=\"margin-left:11%; margin-top: 1em\">There is also a mailing list available for users of this distribution, at <http:\/\/lists.perl.org\/list\/moose.html>.<\/p>\n<p style=\"margin-left:11%; margin-top: 1em\">There is also an irc channel available for users of this distribution, at &#8220;#moose&#8221; on &#8220;irc.perl.org&#8221; <irc:\/\/irc.perl.org\/#moose>.<\/p>\n<h2>AUTHOR <a name=\"AUTHOR\"><\/a> <\/h2>\n<p style=\"margin-left:11%; margin-top: 1em\">Stevan Little <stevan@iinteractive.com><\/p>\n<h2>CONTRIBUTORS <a name=\"CONTRIBUTORS\"><\/a> <\/h2>\n<table width=\"100%\" border=\"0\" rules=\"none\" frame=\"void\" cellspacing=\"0\" cellpadding=\"0\">\n<tr valign=\"top\" align=\"left\">\n<td width=\"11%\"><\/td>\n<td width=\"1%\">\n<p style=\"margin-top: 1em\">\u2022<\/p>\n<\/td>\n<td width=\"5%\"><\/td>\n<td width=\"83%\">\n<p style=\"margin-top: 1em\">Karen Etheridge <ether@cpan.org><\/p>\n<\/td>\n<\/tr>\n<tr valign=\"top\" align=\"left\">\n<td width=\"11%\"><\/td>\n<td width=\"1%\">\n<p>\u2022<\/p>\n<\/td>\n<td width=\"5%\"><\/td>\n<td width=\"83%\">\n<p>Tomas Doran <bobtfish@bobtfish.net><\/p>\n<\/td>\n<\/tr>\n<tr valign=\"top\" align=\"left\">\n<td width=\"11%\"><\/td>\n<td width=\"1%\">\n<p>\u2022<\/p>\n<\/td>\n<td width=\"5%\"><\/td>\n<td width=\"83%\">\n<p>Stevan Little <stevan.little@iinteractive.com><\/p>\n<\/td>\n<\/tr>\n<tr valign=\"top\" align=\"left\">\n<td width=\"11%\"><\/td>\n<td width=\"1%\">\n<p>\u2022<\/p>\n<\/td>\n<td width=\"5%\"><\/td>\n<td width=\"83%\">\n<p>Yuval Kogman <nothingmuch@woobling.org><\/p>\n<\/td>\n<\/tr>\n<tr valign=\"top\" align=\"left\">\n<td width=\"11%\"><\/td>\n<td width=\"1%\">\n<p>\u2022<\/p>\n<\/td>\n<td width=\"5%\"><\/td>\n<td width=\"83%\">\n<p>Florian Ragwitz <rafl@debian.org><\/p>\n<\/td>\n<\/tr>\n<tr valign=\"top\" align=\"left\">\n<td width=\"11%\"><\/td>\n<td width=\"1%\">\n<p>\u2022<\/p>\n<\/td>\n<td width=\"5%\"><\/td>\n<td width=\"83%\">\n<p>Brandon L Black <blblack@gmail.com><\/p>\n<\/td>\n<\/tr>\n<tr valign=\"top\" align=\"left\">\n<td width=\"11%\"><\/td>\n<td width=\"1%\">\n<p>\u2022<\/p>\n<\/td>\n<td width=\"5%\"><\/td>\n<td width=\"83%\">\n<p>Shlomi Fish <shlomif@cpan.org><\/p>\n<\/td>\n<\/tr>\n<tr valign=\"top\" align=\"left\">\n<td width=\"11%\"><\/td>\n<td width=\"1%\">\n<p>\u2022<\/p>\n<\/td>\n<td width=\"5%\"><\/td>\n<td width=\"83%\">\n<p>Hans Dieter Pearcey <hdp@weftsoar.net><\/p>\n<\/td>\n<\/tr>\n<tr valign=\"top\" align=\"left\">\n<td width=\"11%\"><\/td>\n<td width=\"1%\">\n<p>\u2022<\/p>\n<\/td>\n<td width=\"5%\"><\/td>\n<td width=\"83%\">\n<p>Olaf Alders <olaf@wundersolutions.com><\/p>\n<\/td>\n<\/tr>\n<tr valign=\"top\" align=\"left\">\n<td width=\"11%\"><\/td>\n<td width=\"1%\">\n<p>\u2022<\/p>\n<\/td>\n<td width=\"5%\"><\/td>\n<td width=\"83%\">\n<p>Nelo Onyiah <nelo.onyiah@gmail.com><\/p>\n<\/td>\n<\/tr>\n<tr valign=\"top\" align=\"left\">\n<td width=\"11%\"><\/td>\n<td width=\"1%\">\n<p>\u2022<\/p>\n<\/td>\n<td width=\"5%\"><\/td>\n<td width=\"83%\">\n<p>Ryan D Johnson <ryan@innerfence.com><\/p>\n<\/td>\n<\/tr>\n<tr valign=\"top\" align=\"left\">\n<td width=\"11%\"><\/td>\n<td width=\"1%\">\n<p>\u2022<\/p>\n<\/td>\n<td width=\"5%\"><\/td>\n<td width=\"83%\">\n<p>Dave Rolsky <autarch@urth.org><\/p>\n<\/td>\n<\/tr>\n<tr valign=\"top\" align=\"left\">\n<td width=\"11%\"><\/td>\n<td width=\"1%\">\n<p>\u2022<\/p>\n<\/td>\n<td width=\"5%\"><\/td>\n<td width=\"83%\">\n<p>Ricardo <small>SIGNES<\/small> <rjbs@cpan.org><\/p>\n<\/td>\n<\/tr>\n<tr valign=\"top\" align=\"left\">\n<td width=\"11%\"><\/td>\n<td width=\"1%\">\n<p>\u2022<\/p>\n<\/td>\n<td width=\"5%\"><\/td>\n<td width=\"83%\">\n<p>AEvar Arnfjoer` Bjarmason <avarab@gmail.com><\/p>\n<\/td>\n<\/tr>\n<tr valign=\"top\" align=\"left\">\n<td width=\"11%\"><\/td>\n<td width=\"1%\">\n<p>\u2022<\/p>\n<\/td>\n<td width=\"5%\"><\/td>\n<td width=\"83%\">\n<p>Hinrik Oern Sigur`sson <hinrik.sig@gmail.com><\/p>\n<\/td>\n<\/tr>\n<tr valign=\"top\" align=\"left\">\n<td width=\"11%\"><\/td>\n<td width=\"1%\">\n<p>\u2022<\/p>\n<\/td>\n<td width=\"5%\"><\/td>\n<td width=\"83%\">\n<p>Damien Krotkine <dkrotkine@weborama.com><\/p>\n<\/td>\n<\/tr>\n<tr valign=\"top\" align=\"left\">\n<td width=\"11%\"><\/td>\n<td width=\"1%\">\n<p>\u2022<\/p>\n<\/td>\n<td width=\"5%\"><\/td>\n<td width=\"83%\">\n<p>Todd Hepler <thepler@employees.org><\/p>\n<\/td>\n<\/tr>\n<tr valign=\"top\" align=\"left\">\n<td width=\"11%\"><\/td>\n<td width=\"1%\">\n<p>\u2022<\/p>\n<\/td>\n<td width=\"5%\"><\/td>\n<td width=\"83%\">\n<p>Devin Austin <dhoss@cpan.org><\/p>\n<\/td>\n<\/tr>\n<tr valign=\"top\" align=\"left\">\n<td width=\"11%\"><\/td>\n<td width=\"1%\">\n<p>\u2022<\/p>\n<\/td>\n<td width=\"5%\"><\/td>\n<td width=\"83%\">\n<p>Jose Luis Martinez <jlmartinez@capside.com><\/p>\n<\/td>\n<\/tr>\n<tr valign=\"top\" align=\"left\">\n<td width=\"11%\"><\/td>\n<td width=\"1%\">\n<p>\u2022<\/p>\n<\/td>\n<td width=\"5%\"><\/td>\n<td width=\"83%\">\n<p>Gregory Oschwald <goschwald@maxmind.com><\/p>\n<\/td>\n<\/tr>\n<tr valign=\"top\" align=\"left\">\n<td width=\"11%\"><\/td>\n<td width=\"1%\">\n<p>\u2022<\/p>\n<\/td>\n<td width=\"5%\"><\/td>\n<td width=\"83%\">\n<p>Chris Prather <chris@prather.org><\/p>\n<\/td>\n<\/tr>\n<tr valign=\"top\" align=\"left\">\n<td width=\"11%\"><\/td>\n<td width=\"1%\">\n<p>\u2022<\/p>\n<\/td>\n<td width=\"5%\"><\/td>\n<td width=\"83%\">\n<p>Jonathan Swartz <swartz@pobox.com><\/p>\n<\/td>\n<\/tr>\n<tr valign=\"top\" align=\"left\">\n<td width=\"11%\"><\/td>\n<td width=\"1%\">\n<p>\u2022<\/p>\n<\/td>\n<td width=\"5%\"><\/td>\n<td width=\"83%\">\n<p>Andreas Koenig <Andreas.Koenig.extern@telecolumbus.de><\/p>\n<\/td>\n<\/tr>\n<tr valign=\"top\" align=\"left\">\n<td width=\"11%\"><\/td>\n<td width=\"1%\">\n<p>\u2022<\/p>\n<\/td>\n<td width=\"5%\"><\/td>\n<td width=\"83%\">\n<p>Dagfinn Ilmari Mannsaaker <ilmari@ilmari.org><\/p>\n<\/td>\n<\/tr>\n<tr valign=\"top\" align=\"left\">\n<td width=\"11%\"><\/td>\n<td width=\"1%\">\n<p>\u2022<\/p>\n<\/td>\n<td width=\"5%\"><\/td>\n<td width=\"83%\">\n<p>Damyan Ivanov <dmn@debian.org><\/p>\n<\/td>\n<\/tr>\n<tr valign=\"top\" align=\"left\">\n<td width=\"11%\"><\/td>\n<td width=\"1%\">\n<p>\u2022<\/p>\n<\/td>\n<td width=\"5%\"><\/td>\n<td width=\"83%\">\n<p>Drew Taylor <drew@drewtaylor.com><\/p>\n<\/td>\n<\/tr>\n<tr valign=\"top\" align=\"left\">\n<td width=\"11%\"><\/td>\n<td width=\"1%\">\n<p>\u2022<\/p>\n<\/td>\n<td width=\"5%\"><\/td>\n<td width=\"83%\">\n<p>Gordon Irving <goraxe@goraxe.me.uk><\/p>\n<\/td>\n<\/tr>\n<tr valign=\"top\" align=\"left\">\n<td width=\"11%\"><\/td>\n<td width=\"1%\">\n<p>\u2022<\/p>\n<\/td>\n<td width=\"5%\"><\/td>\n<td width=\"83%\">\n<p>Jesse Luehrs <doy@tozt.net><\/p>\n<\/td>\n<\/tr>\n<tr valign=\"top\" align=\"left\">\n<td width=\"11%\"><\/td>\n<td width=\"1%\">\n<p>\u2022<\/p>\n<\/td>\n<td width=\"5%\"><\/td>\n<td width=\"83%\">\n<p>John Goulah <jgoulah@cpan.org><\/p>\n<\/td>\n<\/tr>\n<tr valign=\"top\" align=\"left\">\n<td width=\"11%\"><\/td>\n<td width=\"1%\">\n<p>\u2022<\/p>\n<\/td>\n<td width=\"5%\"><\/td>\n<td width=\"83%\">\n<p>Andreas Koenig <andk@cpan.org><\/p>\n<\/td>\n<\/tr>\n<tr valign=\"top\" align=\"left\">\n<td width=\"11%\"><\/td>\n<td width=\"1%\">\n<p>\u2022<\/p>\n<\/td>\n<td width=\"5%\"><\/td>\n<td width=\"83%\">\n<p>Justin Hunter <justin.d.hunter@gmail.com><\/p>\n<\/td>\n<\/tr>\n<tr valign=\"top\" align=\"left\">\n<td width=\"11%\"><\/td>\n<td width=\"1%\">\n<p>\u2022<\/p>\n<\/td>\n<td width=\"5%\"><\/td>\n<td width=\"83%\">\n<p>Michael Schout <mschout@gkg.net><\/p>\n<\/td>\n<\/tr>\n<tr valign=\"top\" align=\"left\">\n<td width=\"11%\"><\/td>\n<td width=\"1%\">\n<p>\u2022<\/p>\n<\/td>\n<td width=\"5%\"><\/td>\n<td width=\"83%\">\n<p>Shlomi Fish <shlomif@shlomifish.org><\/p>\n<\/td>\n<\/tr>\n<tr valign=\"top\" align=\"left\">\n<td width=\"11%\"><\/td>\n<td width=\"1%\">\n<p>\u2022<\/p>\n<\/td>\n<td width=\"5%\"><\/td>\n<td width=\"83%\">\n<p>Stevan Little <stevan.little@gmail.com><\/p>\n<\/td>\n<\/tr>\n<tr valign=\"top\" align=\"left\">\n<td width=\"11%\"><\/td>\n<td width=\"1%\">\n<p>\u2022<\/p>\n<\/td>\n<td width=\"5%\"><\/td>\n<td width=\"83%\">\n<p>Stuart A Johnston <saj_git@thecommune.net><\/p>\n<\/td>\n<\/tr>\n<\/table>\n<h2>COPYRIGHT AND LICENSE <a name=\"COPYRIGHT AND LICENSE\"><\/a> <\/h2>\n<p style=\"margin-left:11%; margin-top: 1em\">This software is copyright (c) 2007 by Infinity Interactive, Inc.<\/p>\n<p style=\"margin-left:11%; margin-top: 1em\">This is free software; you can redistribute it and\/or modify it under the same terms as the Perl 5 programming language system itself.<\/p>\n<hr>\n","protected":false},"excerpt":{"rendered":"<p>  MooseX::Getopt \u2212 A Moose role for processing command line options <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[3007,3506],"class_list":["post-7172","post","type-post","status-publish","format-standard","hentry","category-sin-categoria","tag-man3","tag-moosexgetopt"],"gutentor_comment":0,"_links":{"self":[{"href":"https:\/\/lode.uno\/linux-man\/wp-json\/wp\/v2\/posts\/7172","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/lode.uno\/linux-man\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/lode.uno\/linux-man\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/lode.uno\/linux-man\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/lode.uno\/linux-man\/wp-json\/wp\/v2\/comments?post=7172"}],"version-history":[{"count":0,"href":"https:\/\/lode.uno\/linux-man\/wp-json\/wp\/v2\/posts\/7172\/revisions"}],"wp:attachment":[{"href":"https:\/\/lode.uno\/linux-man\/wp-json\/wp\/v2\/media?parent=7172"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/lode.uno\/linux-man\/wp-json\/wp\/v2\/categories?post=7172"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/lode.uno\/linux-man\/wp-json\/wp\/v2\/tags?post=7172"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}