










Sig: Manejo y recuperación de
Sup: Análisis Sintáctico con Regexp::Grammars
Ant: Mensajes de log del
Err: Si hallas una errata ...
It is possible to use Regexp::Grammars
without creating any subrule
definitions, simply to debug a recalcitrant regex. For example, if the
following regex wasn't working as expected:
my $balanced_brackets = qr{
\( # left delim
(?:
\\ # escape or
| (?R) # recurse or
| . # whatever
)*
\) # right delim
}xms;
you could instrument it with aliased subpatterns and then debug it
step-by-step, using Regexp::Grammars:
use Regexp::Grammars;
my $balanced_brackets = qr{
<debug:step>
<.left_delim= ( \( )>
(?:
<.escape= ( \\ )>
| <.recurse= ( (?R) )>
| <.whatever=( . )>
)*
<.right_delim= ( \) )>
}xms;
while (<>) {
say 'matched' if /$balanced_brackets/;
}
Note the use of amnesiac aliased subpatterns to avoid needlessly
building a result-hash. Alternatively, you could use listifying aliases
to preserve the matching structure as an additional debugging aid:
use Regexp::Grammars;
my $balanced_brackets = qr{
<debug:step>
<[left_delim= ( \( )]>
(?:
<[escape= ( \\ )]>
| <[recurse= ( (?R) )]>
| <[whatever=( . )]>
)*
<[right_delim= ( \) )]>
}xms;
if ( '(a(bc)d)' =~ /$balanced_brackets/) {
use Data::Dumper 'Dumper';
warn Dumper \%/;
}











Sig: Manejo y recuperación de
Sup: Análisis Sintáctico con Regexp::Grammars
Ant: Mensajes de log del
Err: Si hallas una errata ...
Casiano Rodríguez León
2012-05-22