.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.43) .\" .\" Standard preamble: .\" ======================================================================== .de Sp \" Vertical space (when we can't use .PP) .if t .sp .5v .if n .sp .. .de Vb \" Begin verbatim text .ft CW .nf .ne \\$1 .. .de Ve \" End verbatim text .ft R .fi .. .\" Set up some character translations and predefined strings. \*(-- will .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left .\" double quote, and \*(R" will give a right double quote. \*(C+ will .\" give a nicer C++. Capital omega is used to do unbreakable dashes and .\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, .\" nothing in troff, for use with C<>. .tr \(*W- .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' .ie n \{\ . ds -- \(*W- . ds PI pi . if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch . if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch . ds L" "" . ds R" "" . ds C` "" . ds C' "" 'br\} .el\{\ . ds -- \|\(em\| . ds PI \(*p . ds L" `` . ds R" '' . ds C` . ds C' 'br\} .\" .\" Escape single quotes in literal strings from groff's Unicode transform. .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" .\" If the F register is >0, we'll generate index entries on stderr for .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index .\" entries marked with X<> in POD. Of course, you'll have to process the .\" output yourself in some meaningful fashion. .\" .\" Avoid warning from groff about undefined register 'F'. .de IX .. .nr rF 0 .if \n(.g .if rF .nr rF 1 .if (\n(rF:(\n(.g==0)) \{\ . if \nF \{\ . de IX . tm Index:\\$1\t\\n%\t"\\$2" .. . if !\nF==2 \{\ . nr % 0 . nr F 2 . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "App::Cmd::Setup 3pm" .TH App::Cmd::Setup 3pm "2023-09-24" "perl v5.36.0" "User Contributed Perl Documentation" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" App::Cmd::Setup \- helper for setting up App::Cmd classes .SH "VERSION" .IX Header "VERSION" version 0.336 .SH "OVERVIEW" .IX Header "OVERVIEW" App::Cmd::Setup is a helper library, used to set up base classes that will be used as part of an App::Cmd program. For the most part you should refer to the tutorial for how you should use this library. .PP This class is useful in three scenarios: .IP "when writing your App::Cmd subclass" 4 .IX Item "when writing your App::Cmd subclass" Instead of writing: .Sp .Vb 2 \& package MyApp; \& use parent \*(AqApp::Cmd\*(Aq; .Ve .Sp \&...you can write: .Sp .Vb 2 \& package MyApp; \& use App::Cmd::Setup \-app; .Ve .Sp The benefits of doing this are mostly minor, and relate to sanity-checking your class. The significant benefit is that this form allows you to specify plugins, as in: .Sp .Vb 2 \& package MyApp; \& use App::Cmd::Setup \-app => { plugins => [ \*(AqPrompt\*(Aq ] }; .Ve .Sp Plugins are described in App::Cmd::Tutorial. .Sp Doing this also allows you to override the default configuration passed to Getopt::Long. By default, this configuration includes \f(CW\*(C`pass_through\*(C'\fR, which allows subdispatch to work correctly. If you are not using subdispatch, and want your command to exit on unknown options, you can say: .Sp .Vb 2 \& package MyApp; \& use App::Cmd::Setup \-app => { getopt_conf => [] }; .Ve .IP "when writing abstract base classes for commands" 4 .IX Item "when writing abstract base classes for commands" That is: when you write a subclass of App::Cmd::Command that is intended for other commands to use as their base class, you should use App::Cmd::Setup. For example, if you want all the commands in MyApp to inherit from MyApp::Command, you may want to write that package like this: .Sp .Vb 2 \& package MyApp::Command; \& use App::Cmd::Setup \-command; .Ve .Sp Do not confuse this with the way you will write specific commands: .Sp .Vb 2 \& package MyApp::Command::mycmd; \& use MyApp \-command; .Ve .Sp Again, this form mostly performs some validation and setup behind the scenes for you. You can use \f(CW\*(C`base\*(C'\fR if you prefer. .IP "when writing App::Cmd plugins" 4 .IX Item "when writing App::Cmd plugins" App::Cmd::Plugin is a mechanism that allows an App::Cmd class to inject code into all its command classes, providing them with utility routines. .Sp To write a plugin, you must use App::Cmd::Setup. As seen above, you must also use App::Cmd::Setup to set up your App::Cmd subclass if you wish to consume plugins. .Sp For more information on writing plugins, see App::Cmd::Manual and App::Cmd::Plugin. .SH "PERL VERSION" .IX Header "PERL VERSION" This library should run on perls released even a long time ago. It should work on any version of perl released in the last five years. .PP Although it may work on older versions of perl, no guarantee is made that the minimum required version will not be increased. The version may be increased for any reason, and there is no promise that patches will be accepted to lower the minimum required perl. .SH "AUTHOR" .IX Header "AUTHOR" Ricardo Signes .SH "COPYRIGHT AND LICENSE" .IX Header "COPYRIGHT AND LICENSE" This software is copyright (c) 2023 by Ricardo Signes. .PP This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.