NAME

Config::Maker::Path - Selects elements from config.

SYNOPSIS

use Config::Maker

$path = Config::Maker::Path->new(
  -type => $typepattern,
  -value => $valuepattern,
  -code => $perlcode,
  -tail => $rest);

$path = Config::Maker::Path::AnyPath->new(
  -tail => $rest);

$path = Config::Maker::Path::Root->new(
  -tail => $rest);

$path = Config::Maker::Path::Parent->new(
  -tail => $rest);

$path = Config::Maker::Path::This->new(
  -tail => $rest);

$path = Config::Maker::Path->make($pathstring)

$path->find($config_element);

$config_element->get($path);
$config_element->get($pathstring);

DESCRIPTION

Paths are used to select config elements to put in a template.

Path is a list of component. Each of them can be either normal (of type Config::Maker::Path), or special (of some subclass type). Each component, when matched from some configuration element, selects some set of matching elemens. From these elements, rest of the path is matched.

A normal component specifies a type pattern, a value pattern and a match code. A config element matches such component if it is a child of staring element, it's type matches given pattern, it's value matches given pattern and the code returns true. All of these have defaults. Default patterns are * and default code is 1. Note, that the code is not a closure, but rather a string, that is wrapped to a closure automagicaly.

The special components are AnyPath, Root, Parent and This.

The AnyPath element matches starting element and all it's descendants (even indirect).

The Root always returns the global $Config::Maker::Eval::config->{root} element, no matter what the starting element was.

The Parent matches parent of starting element.

The This matches the starting element.

Matching is done recursively using the find and match methods. The find method calls match method of given component to get list of matching elements and then recurses to each of them if -tail is defined, and pushes them in the accumulator otherwise. It returns the acumulator (an arrayref).

There are two construcotrs for paths. The new constructor needs parsed specification. It however builds regexes and coderefs from strings itself.

The higher-level make constructor takes a string describing whole path (see configit for grammar description), parses it and builds the path. It uses Config::Maker::Grammar to do the dirty work.

AUTHOR

Jan Hudec <bulb@ucw.cz>

COPYRIGHT AND LICENSE

Copyright 2004 Jan Hudec. All rights reserved.

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.

SEE ALSO

configit(1), perl(1), Config::Maker(3pm).