1AppConfig::State(3)   User Contributed Perl Documentation  AppConfig::State(3)
2
3
4

NAME

6       AppConfig::State - application configuration state
7

SYNOPSIS

9           use AppConfig::State;
10
11           my $state = AppConfig::State->new(\%cfg);
12
13           $state->define("foo");            # very simple variable definition
14           $state->define("bar", \%varcfg);  # variable specific configuration
15           $state->define("foo|bar=i@");     # compact format
16
17           $state->set("foo", 123);          # trivial set/get examples
18           $state->get("foo");
19
20           $state->foo();                    # shortcut variable access
21           $state->foo(456);                 # shortcut variable update
22

OVERVIEW

24       AppConfig::State is a Perl5 module to handle global configuration
25       variables for perl programs.  It maintains the state of any number of
26       variables, handling default values, aliasing, validation, update
27       callbacks and option arguments for use by other AppConfig::* modules.
28
29       AppConfig::State is distributed as part of the AppConfig bundle.
30

DESCRIPTION

32   USING THE AppConfig::State MODULE
33       To import and use the AppConfig::State module the following line should
34       appear in your Perl script:
35
36            use AppConfig::State;
37
38       The AppConfig::State module is loaded automatically by the new()
39       constructor of the AppConfig module.
40
41       AppConfig::State is implemented using object-oriented methods.  A new
42       AppConfig::State object is created and initialised using the new()
43       method.  This returns a reference to a new AppConfig::State object.
44
45           my $state = AppConfig::State->new();
46
47       This will create a reference to a new AppConfig::State with all
48       configuration options set to their default values.  You can initialise
49       the object by passing a reference to a hash array containing
50       configuration options:
51
52           $state = AppConfig::State->new( {
53               CASE      => 1,
54               ERROR     => \&my_error,
55           } );
56
57       The new() constructor of the AppConfig module automatically passes all
58       parameters to the AppConfig::State new() constructor.  Thus, any global
59       configuration values and variable definitions for AppConfig::State are
60       also applicable to AppConfig.
61
62       The following configuration options may be specified.
63
64       CASE
65           Determines if the variable names are treated case sensitively.  Any
66           non-zero value makes case significant when naming variables.  By
67           default, CASE is set to 0 and thus "Variable", "VARIABLE" and
68           "VaRiAbLe" are all treated as "variable".
69
70       CREATE
71           By default, CREATE is turned off meaning that all variables
72           accessed via set() (which includes access via shortcut such as
73           "$state->variable($value)" which delegates to set()) must
74           previously have been defined via define().  When CREATE is set to
75           1, calling set($variable, $value) on a variable that doesn't exist
76           will cause it to be created automatically.
77
78           When CREATE is set to any other non-zero value, it is assumed to be
79           a regular expression pattern.  If the variable name matches the
80           regex, the variable is created.  This can be used to specify
81           configuration file blocks in which variables should be created, for
82           example:
83
84               $state = AppConfig::State->new( {
85                   CREATE => '^define_',
86               } );
87
88           In a config file:
89
90               [define]
91               name = fred           # define_name gets created automatically
92
93               [other]
94               name = john           # other_name doesn't - warning raised
95
96           Note that a regex pattern specified in CREATE is applied to the
97           real variable name rather than any alias by which the variables may
98           be accessed.
99
100       PEDANTIC
101           The PEDANTIC option determines what action the configuration file
102           (AppConfig::File) or argument parser (AppConfig::Args) should take
103           on encountering a warning condition (typically caused when trying
104           to set an undeclared variable).  If PEDANTIC is set to any true
105           value, the parsing methods will immediately return a value of 0 on
106           encountering such a condition.  If PEDANTIC is not set, the method
107           will continue to parse the remainder of the current file(s) or
108           arguments, returning 0 when complete.
109
110           If no warnings or errors are encountered, the method returns 1.
111
112           In the case of a system error (e.g. unable to open a file), the
113           method returns undef immediately, regardless of the PEDANTIC
114           option.
115
116       ERROR
117           Specifies a user-defined error handling routine.  When the handler
118           is called, a format string is passed as the first parameter,
119           followed by any additional values, as per printf(3C).
120
121       DEBUG
122           Turns debugging on or off when set to 1 or 0 accordingly.
123           Debugging may also be activated by calling _debug() as an object
124           method ("$state->_debug(1)") or as a package function
125           (AppConfig::State::_debug(1)), passing in a true/false value to set
126           the debugging state accordingly.  The package variable
127           $AppConfig::State::DEBUG can also be set directly.
128
129           The _debug() method returns the current debug value.  If a new
130           value is passed in, the internal value is updated, but the previous
131           value is returned.
132
133           Note that any AppConfig::File or App::Config::Args objects that are
134           instantiated with a reference to an App::State will inherit the
135           DEBUG (and also PEDANTIC) values of the state at that time.
136           Subsequent changes to the AppConfig::State debug value will not
137           affect them.
138
139       GLOBAL
140           The GLOBAL option allows default values to be set for the DEFAULT,
141           ARGCOUNT, EXPAND, VALIDATE and ACTION options for any subsequently
142           defined variables.
143
144               $state = AppConfig::State->new({
145                   GLOBAL => {
146                       DEFAULT  => '<undef>',     # default value for new vars
147                       ARGCOUNT => 1,             # vars expect an argument
148                       ACTION   => \&my_set_var,  # callback when vars get set
149                   }
150               });
151
152           Any attributes specified explicitly when a variable is defined will
153           override any GLOBAL values.
154
155           See "DEFINING VARIABLES" below which describes these options in
156           detail.
157
158   DEFINING VARIABLES
159       The "define()" function is used to pre-declare a variable and specify
160       its configuration.
161
162           $state->define("foo");
163
164       In the simple example above, a new variable called "foo" is defined.  A
165       reference to a hash array may also be passed to specify configuration
166       information for the variable:
167
168           $state->define("foo", {
169                   DEFAULT   => 99,
170                   ALIAS     => 'metavar1',
171               });
172
173       Any variable-wide GLOBAL values passed to the new() constructor in the
174       configuration hash will also be applied.  Values explicitly specified
175       in a variable's define() configuration will override the respective
176       GLOBAL values.
177
178       The following configuration options may be specified
179
180       DEFAULT
181           The DEFAULT value is used to initialise the variable.
182
183               $state->define("drink", {
184                       DEFAULT => 'coffee',
185                   });
186
187               print $state->drink();        # prints "coffee"
188
189       ALIAS
190           The ALIAS option allows a number of alternative names to be
191           specified for this variable.  A single alias should be specified as
192           a string.  Multiple aliases can be specified as a reference to an
193           array of alternatives or as a string of names separated by vertical
194           bars, '|'.  e.g.:
195
196               # either
197               $state->define("name", {
198                       ALIAS  => 'person',
199                   });
200
201               # or
202               $state->define("name", {
203                       ALIAS => [ 'person', 'user', 'uid' ],
204                   });
205
206               # or
207               $state->define("name", {
208                       ALIAS => 'person|user|uid',
209                   });
210
211               $state->user('abw');     # equivalent to $state->name('abw');
212
213       ARGCOUNT
214           The ARGCOUNT option specifies the number of arguments that should
215           be supplied for this variable.  By default, no additional arguments
216           are expected for variables (ARGCOUNT_NONE).
217
218           The ARGCOUNT_* constants can be imported from the AppConfig module:
219
220               use AppConfig ':argcount';
221
222               $state->define('foo', { ARGCOUNT => ARGCOUNT_ONE });
223
224           or can be accessed directly from the AppConfig package:
225
226               use AppConfig;
227
228               $state->define('foo', { ARGCOUNT => AppConfig::ARGCOUNT_ONE });
229
230           The following values for ARGCOUNT may be specified.
231
232           ARGCOUNT_NONE (0)
233               Indicates that no additional arguments are expected.  If the
234               variable is identified in a confirguration file or in the
235               command line arguments, it is set to a value of 1 regardless of
236               whatever arguments follow it.
237
238           ARGCOUNT_ONE (1)
239               Indicates that the variable expects a single argument to be
240               provided.  The variable value will be overwritten with a new
241               value each time it is encountered.
242
243           ARGCOUNT_LIST (2)
244               Indicates that the variable expects multiple arguments.  The
245               variable value will be appended to the list of previous values
246               each time it is encountered.
247
248           ARGCOUNT_HASH (3)
249               Indicates that the variable expects multiple arguments and that
250               each argument is of the form "key=value".  The argument will be
251               split into a key/value pair and inserted into the hash of
252               values each time it is encountered.
253
254       ARGS
255           The ARGS option can also be used to specify advanced command line
256           options for use with AppConfig::Getopt, which itself delegates to
257           Getopt::Long.  See those two modules for more information on the
258           format and meaning of these options.
259
260               $state->define("name", {
261                       ARGS => "=i@",
262                   });
263
264       EXPAND
265           The EXPAND option specifies how the AppConfig::File processor
266           should expand embedded variables in the configuration file values
267           it reads.  By default, EXPAND is turned off (EXPAND_NONE) and no
268           expansion is made.
269
270           The EXPAND_* constants can be imported from the AppConfig module:
271
272               use AppConfig ':expand';
273
274               $state->define('foo', { EXPAND => EXPAND_VAR });
275
276           or can be accessed directly from the AppConfig package:
277
278               use AppConfig;
279
280               $state->define('foo', { EXPAND => AppConfig::EXPAND_VAR });
281
282           The following values for EXPAND may be specified.  Multiple values
283           should be combined with vertical bars , '|', e.g. "EXPAND_UID |
284           EXPAND_VAR").
285
286           EXPAND_NONE
287               Indicates that no variable expansion should be attempted.
288
289           EXPAND_VAR
290               Indicates that variables embedded as $var or $(var) should be
291               expanded to the values of the relevant AppConfig::State
292               variables.
293
294           EXPAND_UID
295               Indicates that '~' or '~uid' patterns in the string should be
296               expanded to the current users ($<), or specified user's home
297               directory.  In the first case, "~" is expanded to the value of
298               the "HOME" environment variable.  In the second case, the
299               "getpwnam()" method is used if it is available on your system
300               (which it isn't on Win32).
301
302           EXPAND_ENV
303               Inidicates that variables embedded as ${var} should be expanded
304               to the value of the relevant environment variable.
305
306           EXPAND_ALL
307               Equivalent to "EXPAND_VARS | EXPAND_UIDS | EXPAND_ENVS").
308
309           EXPAND_WARN
310               Indicates that embedded variables that are not defined should
311               raise a warning.  If PEDANTIC is set, this will cause the
312               read() method to return 0 immediately.
313
314       VALIDATE
315           Each variable may have a sub-routine or regular expression defined
316           which is used to validate the intended value for a variable before
317           it is set.
318
319           If VALIDATE is defined as a regular expression, it is applied to
320           the value and deemed valid if the pattern matches.  In this case,
321           the variable is then set to the new value.  A warning message is
322           generated if the pattern match fails.
323
324           VALIDATE may also be defined as a reference to a sub-routine which
325           takes as its arguments the name of the variable and its intended
326           value.  The sub-routine should return 1 or 0 to indicate that the
327           value is valid or invalid, respectively.  An invalid value will
328           cause a warning error message to be generated.
329
330           If the GLOBAL VALIDATE variable is set (see GLOBAL in DESCRIPTION
331           above) then this value will be used as the default VALIDATE for
332           each variable unless otherwise specified.
333
334               $state->define("age", {
335                       VALIDATE => '\d+',
336                   });
337
338               $state->define("pin", {
339                       VALIDATE => \&check_pin,
340                   });
341
342       ACTION
343           The ACTION option allows a sub-routine to be bound to a variable as
344           a callback that is executed whenever the variable is set.  The
345           ACTION is passed a reference to the AppConfig::State object, the
346           name of the variable and the value of the variable.
347
348           The ACTION routine may be used, for example, to post-process
349           variable data, update the value of some other dependant variable,
350           generate a warning message, etc.
351
352           Example:
353
354               $state->define("foo", { ACTION => \&my_notify });
355
356               sub my_notify {
357                   my $state = shift;
358                   my $var   = shift;
359                   my $val   = shift;
360
361                   print "$variable set to $value";
362               }
363
364               $state->foo(42);        # prints "foo set to 42"
365
366           Be aware that calling "$state->set()" to update the same variable
367           from within the ACTION function will cause a recursive loop as the
368           ACTION function is repeatedly called.
369
370
371
372   DEFINING VARIABLES USING THE COMPACT FORMAT
373       Variables may be defined in a compact format which allows any ALIAS and
374       ARGS values to be specified as part of the variable name.  This is
375       designed to mimic the behaviour of Johan Vromans' Getopt::Long module.
376
377       Aliases for a variable should be specified after the variable name,
378       separated by vertical bars, '|'.  Any ARGS parameter should be appended
379       after the variable name(s) and/or aliases.
380
381       The following examples are equivalent:
382
383           $state->define("foo", {
384                   ALIAS => [ 'bar', 'baz' ],
385                   ARGS  => '=i',
386               });
387
388           $state->define("foo|bar|baz=i");
389
390   READING AND MODIFYING VARIABLE VALUES
391       AppConfig::State defines two methods to manipulate variable values:
392
393           set($variable, $value);
394           get($variable);
395
396       Both functions take the variable name as the first parameter and
397       "set()" takes an additional parameter which is the new value for the
398       variable.  "set()" returns 1 or 0 to indicate successful or
399       unsuccessful update of the variable value.  If there is an ACTION
400       routine associated with the named variable, the value returned will be
401       passed back from "set()".  The "get()" function returns the current
402       value of the variable.
403
404       Once defined, variables may be accessed directly as object methods
405       where the method name is the same as the variable name.  i.e.
406
407           $state->set("verbose", 1);
408
409       is equivalent to
410
411           $state->verbose(1);
412
413       Without parameters, the current value of the variable is returned.  If
414       a parameter is specified, the variable is set to that value and the
415       result of the set() operation is returned.
416
417           $state->age(29);        # sets 'age' to 29, returns 1 (ok)
418
419   INTERNAL METHODS
420       The interal (private) methods of the AppConfig::State class are listed
421       below.
422
423       They aren't intended for regular use and potential users should
424       consider the fact that nothing about the internal implementation is
425       guaranteed to remain the same.  Having said that, the AppConfig::State
426       class is intended to co-exist and work with a number of other modules
427       and these are considered "friend" classes.  These methods are provided,
428       in part, as services to them.  With this acknowledged co-operation in
429       mind, it is safe to assume some stability in this core interface.
430
431       The _varname() method can be used to determine the real name of a
432       variable from an alias:
433
434           $varname->_varname($alias);
435
436       Note that all methods that take a variable name, including those listed
437       below, can accept an alias and automatically resolve it to the correct
438       variable name.  There is no need to call _varname() explicitly to do
439       alias expansion.  The _varname() method will fold all variables names
440       to lower case unless CASE sensititvity is set.
441
442       The _exists() method can be used to check if a variable has been
443       defined:
444
445           $state->_exists($varname);
446
447       The _default() method can be used to reset a variable to its default
448       value:
449
450           $state->_default($varname);
451
452       The _expand() method can be used to determine the EXPAND value for a
453       variable:
454
455           print "$varname EXPAND: ", $state->_expand($varname), "\n";
456
457       The _argcount() method returns the value of the ARGCOUNT attribute for
458       a variable:
459
460           print "$varname ARGCOUNT: ", $state->_argcount($varname), "\n";
461
462       The _validate() method can be used to determine if a new value for a
463       variable meets any validation criteria specified for it.  The variable
464       name and intended value should be passed in.  The methods returns a
465       true/false value depending on whether or not the validation succeeded:
466
467           print "OK\n" if $state->_validate($varname, $value);
468
469       The _pedantic() method can be called to determine the current value of
470       the PEDANTIC option.
471
472           print "pedantic mode is ", $state->_pedantic() ? "on" ; "off", "\n";
473
474       The _debug() method can be used to turn debugging on or off (pass 1 or
475       0 as a parameter).  It can also be used to check the debug state,
476       returning the current internal value of $AppConfig::State::DEBUG.  If a
477       new debug value is provided, the debug state is updated and the
478       previous state is returned.
479
480           $state->_debug(1);               # debug on, returns previous value
481
482       The _dump_var($varname) and _dump() methods may also be called for
483       debugging purposes.
484
485           $state->_dump_var($varname);    # show variable state
486           $state->_dump();                # show internal state and all vars
487

AUTHOR

489       Andy Wardley, <abw@wardley.org>
490
492       Copyright (C) 1997-2007 Andy Wardley.  All Rights Reserved.
493
494       Copyright (C) 1997,1998 Canon Research Centre Europe Ltd.
495
496       This module is free software; you can redistribute it and/or modify it
497       under the same terms as Perl itself.
498

SEE ALSO

500       AppConfig, AppConfig::File, AppConfig::Args, AppConfig::Getopt
501
502
503
504perl v5.10.1                      2007-05-30               AppConfig::State(3)
Impressum