home *** CD-ROM | disk | FTP | other *** search
/ Chip 2000 May / Chip_2000-05_cd1.bin / zkuste / Perl / ActivePerl-5.6.0.613.msi / 䆊䌷䈹䈙䏵-䞅䞆䞀㡆䞃䄦䠥 / _63fc70d5fb0496ec024d6fc28098ac2b < prev    next >
Text File  |  2000-03-23  |  18KB  |  372 lines

  1.  
  2. <HTML>
  3. <HEAD>
  4. <TITLE>Getopt::Mixed - getopt processing with both long and short options</TITLE>
  5. <LINK REL="stylesheet" HREF="../../../Active.css" TYPE="text/css">
  6. <LINK REV="made" HREF="mailto:">
  7. </HEAD>
  8.  
  9. <BODY>
  10. <TABLE BORDER=0 CELLPADDING=0 CELLSPACING=0 WIDTH=100%>
  11. <TR><TD CLASS=block VALIGN=MIDDLE WIDTH=100% BGCOLOR="#cccccc">
  12. <STRONG><P CLASS=block> Getopt::Mixed - getopt processing with both long and short options</P></STRONG>
  13. </TD></TR>
  14. </TABLE>
  15.  
  16. <A NAME="__index__"></A>
  17. <!-- INDEX BEGIN -->
  18.  
  19. <UL>
  20.  
  21.     <LI><A HREF="#name">NAME</A></LI><LI><A HREF="#supportedplatforms">SUPPORTED PLATFORMS</A></LI>
  22.  
  23.     <LI><A HREF="#synopsis">SYNOPSIS</A></LI>
  24.     <LI><A HREF="#description">DESCRIPTION</A></LI>
  25.     <UL>
  26.  
  27.         <LI><A HREF="#option descriptions">Option Descriptions</A></LI>
  28.         <LI><A HREF="#user interface">User Interface</A></LI>
  29.         <LI><A HREF="#the simple method">The Simple Method</A></LI>
  30.         <LI><A HREF="#the flexible method">The Flexible Method</A></LI>
  31.     </UL>
  32.  
  33.     <LI><A HREF="#other functions">OTHER FUNCTIONS</A></LI>
  34.     <LI><A HREF="#customization">CUSTOMIZATION</A></LI>
  35.     <LI><A HREF="#bugs">BUGS</A></LI>
  36.     <LI><A HREF="#license">LICENSE</A></LI>
  37.     <LI><A HREF="#author">AUTHOR</A></LI>
  38. </UL>
  39. <!-- INDEX END -->
  40.  
  41. <HR>
  42. <P>
  43. <H1><A NAME="name">NAME</A></H1>
  44. <P>Getopt::Mixed - getopt processing with both long and short options</P>
  45. <P>
  46. <HR>
  47. <H1><A NAME="supportedplatforms">SUPPORTED PLATFORMS</A></H1>
  48. <UL>
  49. <LI>Linux</LI>
  50. <LI>Solaris</LI>
  51. <LI>Windows</LI>
  52. </UL>
  53. <HR>
  54. <H1><A NAME="synopsis">SYNOPSIS</A></H1>
  55. <PRE>
  56.     use Getopt::Mixed;
  57.     Getopt::Mixed::getOptions(...option-descriptions...);
  58.     ...examine $opt_* variables...</PRE>
  59. <P>or</P>
  60. <PRE>
  61.     use Getopt::Mixed "nextOption";
  62.     Getopt::Mixed::init(...option-descriptions...);
  63.     while (($option, $value) = nextOption()) {
  64.         ...process option...
  65.     }
  66.     Getopt::Mixed::cleanup();</PRE>
  67. <P>
  68. <HR>
  69. <H1><A NAME="description">DESCRIPTION</A></H1>
  70. <P>This package is my response to the standard modules Getopt::Std and
  71. Getopt::Long.  <CODE>Std</CODE> doesn't support long options, and <CODE>Long</CODE>
  72. doesn't support short options.  I wanted both, since long options are
  73. easier to remember and short options are faster to type.</P>
  74. <P>This package is intended to be the ``Getopt-to-end-all-Getop's''.  It
  75. combines (I hope) flexibility and simplicity.  It supports both short
  76. options (introduced by <CODE>-</CODE>) and long options (introduced by <CODE>--</CODE>).
  77. Short options which do not take an argument can be grouped together.
  78. Short options which do take an argument must be the last option in
  79. their group, because everything following the option will be
  80. considered to be its argument.</P>
  81. <P>There are two methods for using Getopt::Mixed:  the simple method and
  82. the flexible method.  Both methods use the same format for option
  83. descriptions.</P>
  84. <P>
  85. <H2><A NAME="option descriptions">Option Descriptions</A></H2>
  86. <P>The option-description arguments required by <CODE>init</CODE> and <CODE>getOptions</CODE>
  87. are strings composed of individual option descriptions.  Several
  88. option descriptions can appear in the same string if they are
  89. separated by whitespace.</P>
  90. <P>Each description consists of the option name and an optional trailing
  91. argument specifier.  Option names may consist of any characters but
  92. whitespace, <CODE>=</CODE>, <CODE>:</CODE>, and <CODE>></CODE>.</P>
  93. <P>Values for argument specifiers are:</P>
  94. <PRE>
  95.   <none>   option does not take an argument
  96.   =s :s    option takes a mandatory (=) or optional (:) string argument
  97.   =i :i    option takes a mandatory (=) or optional (:) integer argument
  98.   =f :f    option takes a mandatory (=) or optional (:) real number argument
  99.   >new     option is a synonym for option `new'</PRE>
  100. <P>The <CODE>></CODE> specifier is not really an argument specifier.  It
  101. defines an option as being a synonym for another option.  For example,
  102. ``a=i apples>a'' would define <STRONG>-a</STRONG> as an option that requires an
  103. integer argument and <STRONG>--apples</STRONG> as a synonym for <STRONG>-a</STRONG>.  Only one
  104. level of synonyms is supported, and the root option must be listed
  105. first.  For example, ``apples>a a=i'' and ``a=i apples>a oranges>apples''
  106. are illegal; use ``a=i apples>a oranges>a'' if that's what you want.</P>
  107. <P>For example, in the option description:
  108.      ``a b=i c:s apple baker>b charlie:s''
  109.          -a and --apple do not take arguments
  110.          -b takes a mandatory integer argument
  111.          --baker is a synonym for -b
  112.          -c and --charlie take an optional string argument</P>
  113. <P>If the first argument to <CODE>init</CODE> or <CODE>getOptions</CODE> is entirely
  114. non-alphanumeric characters with no whitespace, it represents the
  115. characters which can begin options.</P>
  116. <P>
  117. <H2><A NAME="user interface">User Interface</A></H2>
  118. <P>From the user's perspective, short options are introduced by a dash
  119. (<CODE>-</CODE>) and long options are introduced by a double dash (<CODE>--</CODE>).
  120. Short options may be combined (``-a -b'' can be written ``-ab''), but an
  121. option that takes an argument must be the last one in its group,
  122. because anything following it is considered part of the argument.  A
  123. double dash by itself marks the end of the options; all arguments
  124. following it are treated as normal arguments, not options.  A single
  125. dash by itself is treated as a normal argument, <EM>not</EM> an option.</P>
  126. <P>Long options may be abbreviated.  An option <STRONG>--all-the-time</STRONG> could be
  127. abbreviated <STRONG>--all</STRONG>, <STRONG>--a--tim</STRONG>, or even <STRONG>--a</STRONG>.  Note that <STRONG>--time</STRONG>
  128. would not work; the abbreviation must start at the beginning of the
  129. option name.  If an abbreviation is ambiguous, an error message will
  130. be printed.</P>
  131. <P>In the following examples, <STRONG>-i</STRONG> and <STRONG>--int</STRONG> take integer arguments,
  132. <STRONG>-f</STRONG> and <STRONG>--float</STRONG> take floating point arguments, and <STRONG>-s</STRONG> and
  133. <STRONG>--string</STRONG> take string arguments.  All other options do not take an
  134. argument.</P>
  135. <PRE>
  136.   -i24            -f24.5               -sHello
  137.   -i=24 --int=-27 -f=24.5 --float=0.27 -s=Hello --string=Hello</PRE>
  138. <P>If the argument is required, it can also be separated by whitespace:</P>
  139. <PRE>
  140.   -i 24 --int -27 -f 24.5 --float 0.27 -s Hello --string Hello</PRE>
  141. <P>Note that if the option is followed by <CODE>=</CODE>, whatever follows the <CODE>=</CODE>
  142. <EM>is</EM> the argument, even if it's the null string.  In the example</P>
  143. <PRE>
  144.   -i= 24 -f= 24.5 -s= Hello</PRE>
  145. <P><STRONG>-i</STRONG> and <STRONG>-f</STRONG> will cause an error, because the null string is not a
  146. number, but <STRONG>-s</STRONG> is perfectly legal; its argument is the null string,
  147. not ``Hello''.</P>
  148. <P>Remember that optional arguments <EM>cannot</EM> be separated from the
  149. option by whitespace.</P>
  150. <P>
  151. <H2><A NAME="the simple method">The Simple Method</A></H2>
  152. <P>The simple method is</P>
  153. <PRE>
  154.     use Getopt::Mixed;
  155.     Getopt::Mixed::getOptions(...option-descriptions...);</PRE>
  156. <P>You then examine the <CODE>$opt_*</CODE> variables to find out what options were
  157. specified and the <CODE>@ARGV</CODE> array to see what arguments are left.</P>
  158. <P>If <STRONG>-a</STRONG> is an option that doesn't take an argument, then <CODE>$opt_a</CODE>
  159. will be set to 1 if the option is present, or left undefined if the
  160. option is not present.</P>
  161. <P>If <STRONG>-b</STRONG> is an option that takes an argument, then <CODE>$opt_b</CODE> will be
  162. set to the value of the argument if the option is present, or left
  163. undefined if the option is not present.  If the argument is optional
  164. but not supplied, <CODE>$opt_b</CODE> will be set to the null string.</P>
  165. <P>Note that even if you specify that an option <EM>requires</EM> a string
  166. argument, you can still get the null string (if the user specifically
  167. enters it).  If the option requires a numeric argument, you will never
  168. get the null string (because it isn't a number).</P>
  169. <P>When converting the option name to a Perl identifier, any non-word
  170. characters in the name will be converted to underscores (<CODE>_</CODE>).</P>
  171. <P>If the same option occurs more than once, only the last occurrence
  172. will be recorded.  If that's not acceptable, you'll have to use the
  173. flexible method instead.</P>
  174. <P>
  175. <H2><A NAME="the flexible method">The Flexible Method</A></H2>
  176. <P>The flexible method is</P>
  177. <PRE>
  178.     use Getopt::Mixed "nextOption";
  179.     Getopt::Mixed::init(...option-descriptions...);
  180.     while (($option, $value, $pretty) = nextOption()) {
  181.         ...process option...
  182.     }
  183.     Getopt::Mixed::cleanup();</PRE>
  184. <P>This lets you process arguments one at a time.  You can then handle
  185. repeated options any way you want to.  It also lets you see option
  186. names with non-alphanumeric characters without any translation.  This
  187. is also the only method that lets you find out what order the options
  188. and other arguments were in.</P>
  189. <P>First, you call Getopt::Mixed::init with the option descriptions.
  190. Then, you keep calling nextOption until it returns an empty list.
  191. Finally, you call Getopt::Mixed::cleanup when you're done.  The
  192. remaining (non-option) arguments will be found in @ARGV.</P>
  193. <P>Each call to nextOption returns a list of the next option, its value,
  194. and the option as the user typed it.  The value will be undefined if
  195. the option does not take an argument.  The option is stripped of its
  196. starter (e.g., you get ``a'' and ``foo'', not ``-a'' or ``--foo'').  If you
  197. want to print an error message, use the third element, which does
  198. include the option starter.</P>
  199. <P>
  200. <HR>
  201. <H1><A NAME="other functions">OTHER FUNCTIONS</A></H1>
  202. <P>Getopt::Mixed provides one other function you can use.  <CODE>abortMsg</CODE>
  203. prints its arguments on STDERR, plus your program's name and a
  204. newline.  It then exits with status 1.  For example, if <EM>foo.pl</EM>
  205. calls <CODE>abortMsg</CODE> like this:</P>
  206. <PRE>
  207.   Getopt::Mixed::abortMsg("Error");</PRE>
  208. <P>The output will be:</P>
  209. <PRE>
  210.   foo.pl: Error</PRE>
  211. <P>
  212. <HR>
  213. <H1><A NAME="customization">CUSTOMIZATION</A></H1>
  214. <P>There are several customization variables you can set.  All of these
  215. variables should be set <EM>after</EM> calling Getopt::Mixed::init and
  216. <EM>before</EM> calling nextOption.</P>
  217. <P>If you set any of these variables, you <EM>must</EM> check the version
  218. number first.  The easiest way to do this is like this:</P>
  219. <PRE>
  220.     use Getopt::Mixed 1.006;</PRE>
  221. <P>If you are using the simple method, and you want to set these
  222. variables, you'll need to call init before calling getOptions, like
  223. this:</P>
  224. <PRE>
  225.     use Getopt::Mixed 1.006;
  226.     Getopt::Mixed::init(...option-descriptions...);
  227.     ...set configuration variables...
  228.     Getopt::Mixed::getOptions();      # IMPORTANT: no parameters</PRE>
  229. <DL>
  230. <DT><STRONG><A NAME="item_%24order">$order</A></STRONG><BR>
  231. <DD>
  232. $order can be set to $REQUIRE_ORDER, $PERMUTE, or $RETURN_IN_ORDER.
  233. The default is $REQUIRE_ORDER if the environment variable
  234. POSIXLY_CORRECT has been set, $PERMUTE otherwise.
  235. <P>$REQUIRE_ORDER means that no options can follow the first argument
  236. which isn't an option.</P>
  237. <P>$PERMUTE means that all options are treated as if they preceded all
  238. other arguments.</P>
  239. <P>$RETURN_IN_ORDER means that all arguments maintain their ordering.
  240. When nextOption is called, and the next argument is not an option, it
  241. returns the null string as the option and the argument as the value.
  242. nextOption never returns the null list until all the arguments have
  243. been processed.</P>
  244. <P></P>
  245. <DT><STRONG><A NAME="item_%24ignoreCase">$ignoreCase</A></STRONG><BR>
  246. <DD>
  247. Ignore case when matching options.  Default is 1 unless the option
  248. descriptions contain an upper-case letter.
  249. <P></P>
  250. <DT><STRONG><A NAME="item_%24optionStart">$optionStart</A></STRONG><BR>
  251. <DD>
  252. A string of characters that can start options.  Default is ``-''.
  253. <P></P>
  254. <DT><STRONG><A NAME="item_%24badOption">$badOption</A></STRONG><BR>
  255. <DD>
  256. A reference to a function that is called when an unrecognized option
  257. is encountered.  The function receives three arguments.  $_[0] is the
  258. position in @ARGV where the option came from.  $_[1] is the option as
  259. the user typed it (including the option start character).  $_[2] is
  260. either undef or a string describing the reason the option was not
  261. recognized (Currently, the only possible value is 'ambiguous', for a
  262. long option with several possible matches).  The option has already
  263. been removed from @ARGV.  To put it back, you can say:
  264. <PRE>
  265.     splice(@ARGV,$_[0],0,$_[1]);</PRE>
  266. <P>The function can do anything you want to @ARGV.  It should return
  267. whatever you want nextOption to return.</P>
  268. <P>The default is a function that prints an error message and exits the
  269. program.</P>
  270. <P></P>
  271. <DT><STRONG><A NAME="item_%24checkArg">$checkArg</A></STRONG><BR>
  272. <DD>
  273. A reference to a function that is called to make sure the argument
  274. type is correct.  The function receives four arguments.  $_[0] is the
  275. position in @ARGV where the option came from.  $_[1] is the text
  276. following the option, or undefined if there was no text following the
  277. option.  $_[2] is the name of the option as the user typed it
  278. (including the option start character), suitable for error messages.
  279. $_[3] is the argument type specifier.
  280. <P>The function can do anything you want to @ARGV.  It should return
  281. the value for this option.</P>
  282. <P>The default is a function that prints an error message and exits the
  283. program if the argument is not the right type for the option.  You can
  284. also adjust the behavior of the default function by changing
  285. $intRegexp or $floatRegexp.</P>
  286. <P></P>
  287. <DT><STRONG><A NAME="item_%24intRegexp">$intRegexp</A></STRONG><BR>
  288. <DD>
  289. A regular expression that matches an integer.  Default is
  290. '^[-+]?\d+$', which matches a string of digits preceded by an
  291. optional sign.  Unlike the other configuration variables, this cannot
  292. be changed after nextOption is called, because the pattern is compiled
  293. only once.
  294. <P></P>
  295. <DT><STRONG><A NAME="item_%24floatRegexp">$floatRegexp</A></STRONG><BR>
  296. <DD>
  297. A regular expression that matches a floating point number.  Default is
  298. '^[-+]?(\d*\.?\d+|\d+\.)$', which matches the following formats:
  299. ``123'', ``123.'', ``123.45'', and ``.123'' (plus an optional sign).  It does
  300. not match exponential notation.  Unlike the other configuration
  301. variables, this cannot be changed after nextOption is called, because
  302. the pattern is compiled only once.
  303. <P></P>
  304. <DT><STRONG><A NAME="item_%24typeChars">$typeChars</A></STRONG><BR>
  305. <DD>
  306. A string of the characters which are legal argument types.  The
  307. default is 'sif', for String, Integer, and Floating point arguments.
  308. The string should consist only of letters.  Upper case letters are
  309. discouraged, since this will hamper the case-folding of options.  If
  310. you change this, you should set $checkType to a function that will
  311. check arguments of your new type.  Unlike the other configuration
  312. variables, this must be set <EM>before</EM> calling init(), and cannot be
  313. changed afterwards.
  314. <P></P>
  315. <DT><STRONG><A NAME="item_%24checkType">$checkType</A></STRONG><BR>
  316. <DD>
  317. If you add new types to $typeChars, you should set this to a function
  318. which will check arguments of the new types.
  319. <P></P></DL>
  320. <P>
  321. <HR>
  322. <H1><A NAME="bugs">BUGS</A></H1>
  323. <UL>
  324. <LI>
  325. This document should be expanded.
  326. <P></P>
  327. <LI>
  328. A long option must be at least two characters long.  Sorry.
  329. <P></P>
  330. <LI>
  331. The <CODE>!</CODE> argument specifier of Getopt::Long is not supported, but you
  332. could have options <STRONG>--foo</STRONG> and <STRONG>--nofoo</STRONG> and then do something like:
  333. <PRE>
  334.     $opt_foo = 0 if $opt_nofoo;</PRE>
  335. <P></P>
  336. <LI>
  337. The <CODE>@</CODE> argument specifier of Getopt::Long is not supported.  If you
  338. want your values pushed into an array, you'll have to use nextOption
  339. and do it yourself.
  340. <P></P></UL>
  341. <P>
  342. <HR>
  343. <H1><A NAME="license">LICENSE</A></H1>
  344. <P>Getopt::Mixed is distributed under the terms of the GNU General Public
  345. License as published by the Free Software Foundation; either version
  346. 2, or (at your option) any later version.</P>
  347. <P>This means it is distributed in the hope that it will be useful, but
  348. <EM>without any warranty</EM>; without even the implied warranty of
  349. <EM>merchantability</EM> or <EM>fitness for a particular purpose</EM>.  See the
  350. GNU General Public License for more details.</P>
  351. <P>Since Perl scripts are only compiled at runtime, and simply calling
  352. Getopt::Mixed does <EM>not</EM> bring your program under the GPL, the only
  353. real restriction is that you can't use Getopt::Mixed in an
  354. binary-only distribution produced with <A HREF="../../../lib/Pod/perlfunc.html#item_dump"><CODE>dump</CODE></A> (unless you also
  355. provide source code).</P>
  356. <P>
  357. <HR>
  358. <H1><A NAME="author">AUTHOR</A></H1>
  359. <P>Christopher J. Madsen <<EM><A HREF="mailto:ac608@yfn.ysu.edu">ac608@yfn.ysu.edu</A></EM>></P>
  360. <P>Thanks are also due to Andreas Koenig for helping Getopt::Mixed
  361. conform to the standards for Perl modules and for answering a bunch of
  362. questions.  Any remaining deficiencies are my fault.</P>
  363. <TABLE BORDER=0 CELLPADDING=0 CELLSPACING=0 WIDTH=100%>
  364. <TR><TD CLASS=block VALIGN=MIDDLE WIDTH=100% BGCOLOR="#cccccc">
  365. <STRONG><P CLASS=block> Getopt::Mixed - getopt processing with both long and short options</P></STRONG>
  366. </TD></TR>
  367. </TABLE>
  368.  
  369. </BODY>
  370.  
  371. </HTML>
  372.