summaryrefslogtreecommitdiff
blob: 2e30310a888400bd5a1055365f656f8f3c05263f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
diff -Naurp AppConfig-1.65.orig/lib/AppConfig/File.pm AppConfig-1.65/lib/AppConfig/File.pm
--- AppConfig-1.65.orig/lib/AppConfig/File.pm	2007-05-30 07:24:09.000000000 -0400
+++ AppConfig-1.65/lib/AppConfig/File.pm	2007-06-09 07:08:21.000000000 -0400
@@ -38,6 +38,7 @@ sub new {
         STATE    => $state,                # AppConfig::State ref
         DEBUG    => $state->_debug(),      # store local copy of debug 
         PEDANTIC => $state->_pedantic,     # and pedantic flags
+        BLOCKSEP => $state->_blocksep,     # and block separator
     };
 
     bless $self, $class;
@@ -80,7 +81,7 @@ sub parse {
     my $flag;
 
     # take a local copy of the state to avoid much hash dereferencing
-    my ($state, $debug, $pedantic) = @$self{ qw( STATE DEBUG PEDANTIC ) };
+    my ($state, $debug, $pedantic, $blocksep) = @$self{ qw( STATE DEBUG PEDANTIC BLOCKSEP ) };
 
     # we want to install a custom error handler into the AppConfig::State 
     # which appends filename and line info to error messages and then 
@@ -163,7 +164,7 @@ sub parse {
             s/\s+$//;
 
             # look for a [block] to set $prefix
-            if (/^\[([^\]]+)\]$/) {
+            if (/^\[\s*([^\]\s]+)\s*\]$/) {
                 $prefix = $1;
                 print STDERR "Entering [$prefix] block\n" if $debug;
                 next;
@@ -194,7 +195,7 @@ sub parse {
                 $flag = $1;
 
                 # $variable gets any $prefix 
-                $variable = $prefix . '_' . $variable
+                $variable = $prefix . $blocksep . $variable
                     if length $prefix;
 
                 # if the variable doesn't exist, we call set() to give 
diff -Naurp AppConfig-1.65.orig/lib/AppConfig/State.pm AppConfig-1.65/lib/AppConfig/State.pm
--- AppConfig-1.65.orig/lib/AppConfig/State.pm	2007-05-30 07:24:20.000000000 -0400
+++ AppConfig-1.65/lib/AppConfig/State.pm	2007-06-09 07:11:16.000000000 -0400
@@ -53,7 +53,7 @@ my %METHVARS;
 
 # internal values that AUTOLOAD should provide access to
 my %METHFLAGS;
-   @METHFLAGS{ qw( PEDANTIC ) } = ();
+   @METHFLAGS{ qw( PEDANTIC BLOCKSEP ) } = ();
 
 # variable attributes that may be specified in GLOBAL;
 my @GLOBAL_OK = qw( DEFAULT EXPAND VALIDATE ACTION ARGS ARGCOUNT );
@@ -94,6 +94,7 @@ sub new {
         PEDANTIC   => 0,       # return immediately on parse warnings
         EHANDLER   => undef,   # error handler (let's hope we don't need it!)
         ERROR      => '',      # error message
+        BLOCKSEP   => '_',     # separator between [block] and variable name
     };
 
     bless $self, $class;
@@ -504,8 +505,8 @@ sub _configure {
             next;
         };
             
-        # CASE, CREATE and PEDANTIC are stored as they are
-        $opt =~ /^CASE|CREATE|PEDANTIC$/i && do {
+        # CASE, CREATE, PEDANTIC and BLOCKSEP are stored as they are
+        $opt =~ /^CASE|CREATE|PEDANTIC|BLOCKSEP$/i && do {
             $self->{ uc $opt } = $cfg->{ $opt };
             next;
         };
@@ -1015,6 +1016,13 @@ instantiated with a reference to an App:
 DEBUG (and also PEDANTIC) values of the state at that time.  Subsequent
 changes to the AppConfig::State debug value will not affect them.
 
+=item BLOCKSEP
+
+When parsing configuration files that are grouped using constructions
+like [block], this string parameter determines what is used to
+separate the name of the block from the name of each variable
+contained within it.  If unspecified, BLOCKSEP defaults to '_'.
+
 =item GLOBAL 
 
 The GLOBAL option allows default values to be set for the DEFAULT, ARGCOUNT,