Path::Dispatcher::Match.3pm

Langue: en

Version: 2009-12-31 (ubuntu - 24/10/10)

Section: 3 (Bibliothèques de fonctions)

NAME

Path::Dispatcher::Match - the result of a successful rule match

SYNOPSIS

     my $rule = Path::Dispatcher::Rule::Tokens->new(
         tokens => [ 'attack', qr/^\w+$/ ],
         block  => sub { attack($2) },
     );
 
     my $match = $rule->match("attack dragon");
 
     $match->path            # "attack dragon"
     $match->leftover        # empty string (populated with prefix rules)
     $match->rule            # $rule
     $match->result          # ["attack", "dragon"] (decided by the rule)
     $match->set_number_vars # 1 (boolean indicating whether to set $1, $2, etc)
 
     $match->run                         # causes the player to attack the dragon
     $match->run_with_number_vars($code) # runs $code with $1=attack $2=dragon
 
 

DESCRIPTION

If a Path::Dispatcher::Rule successfully matches a path, it creates one or more "Path::Dispatcher::Match" objects.

ATTRIBUTES

rule

The Path::Dispatcher::Rule that created this match.

path

The path that the rule matched.

leftover

The rest of the path. This is populated when the rule matches a prefix of the path.

result

Arbitrary results generated by the rule. For example, Path::Dispatcher::Rule::Regex rules' result is an array reference of capture variables.

set_number_vars

A boolean indicating whether invoking the rule should populate the number variables ($1, $2, etc) with the array reference of results.

Default is true if the "result" is an array reference; otherwise false.

METHODS

run

Executes the rule's codeblock with the same arguments. If ``set_number_vars'' is true, then ``run_with_number_vars'' is used, otherwise the rule's codeblock is invoked directly.

run_with_number_vars coderef, $1, $2, ...

Populates the number variables $1, $2, ... then executes the coderef.

Unfortunately, the only way to achieve this (pre-5.10 anyway) is to match a regular expression. Both a string and a regex are constructed such that matching will produce the correct capture variables.