cvs commit: p5ee/App-Options/lib/App Options.pm

[email protected] (Stephen Adkins)
Newsgroups perl.cvs.p5ee
Message-ID <[email protected]>
cvsuser     04/04/17 06:51:08

  Modified:    App-Options/lib/App Options.pm
  Log:
  show_all is off by default if 'option' or 'options' used
  
  Revision  Changes    Path
  1.7       +38 -25    p5ee/App-Options/lib/App/Options.pm
  
  Index: Options.pm
  ===================================================================
  RCS file: /cvs/public/p5ee/App-Options/lib/App/Options.pm,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -w -r1.6 -r1.7
  --- Options.pm	19 Feb 2004 16:17:15 -0000	1.6
  +++ Options.pm	17 Apr 2004 13:51:08 -0000	1.7
  @@ -1,6 +1,6 @@
   
   #############################################################################
  -## $Id: Options.pm,v 1.6 2004/02/19 16:17:15 spadkins Exp $
  +## $Id: Options.pm,v 1.7 2004/04/17 13:51:08 spadkins Exp $
   #############################################################################
   
   package App::Options;
  @@ -10,7 +10,7 @@
   
   use Carp;
   
  -$VERSION = "0.90";
  +$VERSION = "0.91";
   
   =head1 NAME
   
  @@ -74,20 +74,41 @@
   because it integrates the processing of command line options,
   environment variables, and config files.
   
  -It is different from AppConfig (to which its description bears the
  -most resemblance) by its ability to configure a suite of programs
  -with a cascading set of configuration files. This allows for a large
  -number of programs in a large software system to share a small set
  -of configuration files. Some of the option values may be shared, and
  -some may be targetted at a single program or a pattern-matched set
  -of programs.
  -
   Furthermore, its special treatment of the "perlinc"
   option facilitates the inclusion ("use") of application-specific
   perl modules from special places to enable the installation of
   multiple versions of an application on the same system (i.e.
   /usr/myproduct/version).
   
  +The description of the AppConfig distribution sounds similar
  +to is described here.  However, the following are the key
  +differences.
  +
  + * App::Options does its option processing in the BEGIN block.
  +   This allows for the @INC variable to be modified in time
  +   for subsequent "use" and "require" statements.
  +
  + * App::Options "sections" (i.e. "[cleanup]") are conditional.
  +   It is conditional in App::Options, allowing you to use one
  +   set of option files to configure an entire suite of programs
  +   and scripts.  In AppConfig, the section name is simply a 
  +   prefix which gets prepended to subsequest option names.
  +
  + * App::Options consults a cascading set of option files.
  +   These files include those which are system global, project
  +   global, and user private.  This allows for system
  +   administrators, project developers, and in individual
  +   users to all have complementary roles on defining
  +   the configuration values.
  +
  + * App::Options is not a toolkit but a standardized way of
  +   doing option processing.  With AppConfig, you still have
  +   to decide where to put config files, and you still have to
  +   code the "--help" feature.  With App::Options, you simply
  +   "use App::Options;" and all the hard work is done.
  +   Advanced options can be added later as necessary as args
  +   to the "use" statement.
  +
   App::Options is also the easiest command-line processing system
   that I have found anywhere. It then provides a smooth transition to
   more advanced features only as they are needed.  Every single
  @@ -97,12 +118,9 @@
   The documentation of App::Options takes three
   forms below.
   
  -  Reference - describing the API (methods, args)
  -  Flow - describing the order and logic of processing
  -  Tutorial - describing how to use the API in practical situations
  -
  -Hopefully these will be complementary and useful, even if they
  -are somewhat redundant.
  +  API Reference - describing the API (methods, args)
  +  Logic Flow - describing the order and logic of processing
  +  Usage Tutorial - describing how to use the API in practical situations
   
   =head1 RELATION TO THE P5EE PROJECT
   
  @@ -167,7 +185,7 @@
       near as nice to write at the top of your programs.
   
       BEGIN {
  -        use App::Options qw(none);  # import() does not call init()
  +        use App::Options qw(:none); # import() does not call init()
           App::Options->init();       # we call init() manually
       }
   
  @@ -444,7 +462,7 @@
           #################################################################
   
           local(*App::Options::FILE);
  -        my ($option_file, $exclude_section, $app_specified);
  +        my ($option_file, $exclude_section);
           my ($cond, @cond, $exclude);
           while ($#option_file > -1) {
               $option_file = shift(@option_file);
  @@ -459,17 +477,14 @@
                       if (s|^ *\[([^\[\]]*)\] *||) {
                           @cond = split(/;/,$1);   # separate the conditions that must be satisfied
                           $exclude = 0;            # assume the condition allows inclusion (! $exclude)
  -                        $app_specified = 0;      # the app (program name) itself has not yet been specified
                           foreach $cond (@cond) {  # check each condition
                               if ($cond =~ /^([^=]+)=(.*)$/) {  # i.e. [city=ATL] or [name=/[Ss]tephen/]
                                   $var = $1;
                                   $value = $2;
  -                                $app_specified = 1 if ($var eq "app");
                               }
                               else {              # i.e. [go] matches the program (app) named "go"
                                   $var = "app";
                                   $value = $cond;
  -                                $app_specified = 1;
                               }
                               if ($value =~ m!^/(.*)/$!) {  # variable's value must match the regexp
                                   $regexp = $1;
  @@ -481,9 +496,6 @@
                               else {  # a variable's value must match exactly
                                   $exclude = ((defined $values->{$var} ? $values->{$var} : "") ne $value);
                               }
  -                            if (!$app_specified && !$exclude) {
  -                                $exclude = ($#cond > -1 && $exclude_section);
  -                            }
                               last if ($exclude);
                           }
                           s/^#.*$//;               # delete comments
  @@ -763,7 +775,8 @@
       printf STDERR "       --%-32s print this message (also -?)\n", "help";
       my (@vars, $show_all, %option_seen);
       $show_all = $init_args->{show_all};
  -    $show_all = 1 if (!defined $show_all);
  +    $show_all = $values->{show_all} if (defined $values->{show_all});
  +    $show_all = 1 if (!defined $show_all && !defined $init_args->{option} && !defined $init_args->{options});
       if ($init_args->{options}) {
           @vars = @{$init_args->{options}};
       }
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.