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



Reply via email to