Re: P::RD and OOP
[email protected] ("nntp.perl.org") Tue, 03 Aug 2004 21:51:19 +0200
| Newsgroups | perl.recdescent |
|---|---|
| Message-ID | <[email protected]> |
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