Sean O'Rourke wrote: > <[EMAIL PROTECTED]> writes: > >>Then where do I save those dirs? $Nokia::Gen::self->{SUBREF} >>wouldn't work since there is no such variable. And if I use >>$main::parser->{SUBREF} then the variable name is hardcoded. > > > From the P::RD manpage, I've found > > $thisparser > A reference to the Parse::RecDescent object through which > parsing was initiated. > > Would this do what you need? Could you store directories as > $thisparser->{DATA}{SUBREF}?
or better: $thisparser->{local}{all}{of}{your}{data} ^^^^^
I use the P::RD heavily in inheritance. But be aware, P::RD is inheritable but not the precompiled grammars!
I wrote a patch (posted already on this list) news://nntp.perl.org:119/[EMAIL PROTECTED]
in order to solve this problem for a project of mine: Config::Scoped
Study Config::Scoped for OO style parsers, and ask me if you have problems, but it's very well doceumented. It's released on CPAN. From the README:
NAME
Config:Scoped - feature rich configuration file parser
FEATURES
Config::Scoped has the following highlights as a configuration file parser:
* Complex recursive datastructures to any extent with scalars, lists and hashes as elements,
* As a subset parses any complex Perl datastructures (no references and globs) without *do* or *require*,
* Include files with recursion checks,
* Controlled macro expansion in double quoted tokens,
* Lexically scoped parameter assignments and pragma directives,
* Perl quote like constructs to any extent, '', "", and here docs <<,
* Perl code evaluation in Safe compartments,
* Caching and restore with MD5 checks to determine alterations in the original config files,
* Standard macro, parameter, declaration redefinition validation, may be overridden to validate on semantic knowledge,
* Standard file permission and ownership safety validation, may be overridden,
* Fine control for redefiniton warnings with pragma's and other safety checks,
* Easy inheritable, may be subclassed to build parsers with specialized validation features,
* Condoning syntax checker, semicolons and or commas are not always necessary to finish a statement or a list item if the end can be guessed by other means like newlines, closing brackets, braces etc.,
* Well spotted messages for syntax errors even within include files with correct line numbers and file names,
* Exception based error handling,
* etc.,
PREREQUISITES
Parse::RecDescent, Error
Standard modules:
Carp Storable File::Spec File::Basename Digest::MD5 Safe
APPETIZER
Configuration file example:
# default parameters community = public; variables = [ ifInOctets, ifOutOctets ]; oids = { ifInOctets = 1.3.6.1.2.1.2.2.1.10; ifOutOctets = 1.3.6.1.2.1.2.2.1.16; };
%warnings parameter off; ### allow parameter redefinition
# declarations devices rtr001 { ports = [ 1, 2, 8, 9 ]; }
devices rtr007 { community = 'really top secret!'; ports = [ 1, 2, 3, 4 ]; }
INSTALLATION
It's all pure Perl.
perl Makefile.PL make make test make install
AUTHOR
Karl Gaissmaier ([EMAIL PROTECTED])
COPYRIGHT
Copyright (c) 2004, Karl Gaissmaier. All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
-- Karl Gaissmaier KIZ/Infrastructure, University of Ulm, Germany Email:[EMAIL PROTECTED] Service Group Network