The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
# -*- cperl -*-
use Test::More tests => 17;
use Text::RewriteRules;

RULES/l lexer
foo==>zbr
bar==>ugh
ENDRULES

is(lexer(),undef);

lexer_init("foobar");
is(lexer(),"zbr");
is(lexer(),"ugh");
is(lexer(),undef);

# (4 tests above)---------------

RULES/l lex
(\d+)=e=>["INT",$1]
([A-Z]+)=e=>["STR",$1]
ENDRULES

is(lex(),undef);
lex_init("ID25");
is_deeply(lex(),["STR","ID"]);
is_deeply(lex(),["INT", 25]);
is(lex(),undef);

# (8 tests above)-----------------

RULES/l yylex
IF=e=>["IF","IF"]
(\w+)=e=>["ID",$1]
\s+=ignore=>
ENDRULES

is(yylex(),undef);
yylex_init("  IF XPTO");
is_deeply(yylex(),["IF","IF"]);
is_deeply(yylex(),["ID","XPTO"]);
is(yylex(),undef);

# (12 tests above)----------------

RULES/lx foo
IF=e=>("IF","IF")

(\w+)=e=>("ID",$1)

\s+=ignore=>

=EOF=e=>('',undef)
ENDRULES

=head Fix Highlight
=cut

is(foo(),undef);
foo_init("  IF XPTO");
is_deeply([foo()],["IF","IF"]);
is_deeply([foo()],["ID","XPTO"]);
is_deeply([foo()],['',undef]);
is(foo(),undef);