Some Perl 5 examples: print qr/Hello, (\w+)!/->('World'); # Hello, World! print qr/Hello, (\w+)!/->('!@#)*!@#'); # Invalid input: '!@#' !~ \w+ # FOREACH print qr/Hello, (\w)+!/->([qw< W o r l d >]); print qr/Hello, @x:=(\w)+!/->(x => [qw< W o r l d >]); print qr/Hello, $x:=(\w+) !/->(x => 'World'); # Hello, World! print qr/Hello, $x:=(.*?) !/->(x => 'World'); print qr/Hello, $x:=(.*) !/->(x => 'World'); print qr/Hello, <=$x> !/->(x => 'World'); TT2 translation table: [% INCLUDE header %]
# should be lexical [% PROCESS header %] <&header()> [% INSERT foo %] <'content of foo'> [% GET foo %] <=$foo> $foo:=(.*?) [% SET foo = 3 %] {$foo = 3} [% DEFAULT foo = 3 %] {$foo //= 3} [% FOREACH ary %]...[%END%] @ary:=(...)* @ary:=(...)+ [% BLOCK foo %]...[%END%] rule foo {...} [% IF %] # ??? [% MACRO hdr INCLUDE header %]...[% hdr() %] rule hdr {
} <&hdr()> [% MACRO hdr INCLUDE header %]...[% hdr(x=>1) %] rule hdr {
} # that was easy! <&hdr(x=>1)> [% THROW %] {fail} [% THROW food %] {fail 'food'} [% THROW food.toxic %] {fail 'food.toxic'} # that's trying to be hierarchical (but failing) [% TRY %]xxx[% CATCH %]yyy[% END %] xxx | yyy ============================================================================= # Need to figure out a syntax for reversible repeaters [% WHILE (user = get_next_user_record) %] [% user.name %] [% END %] my @things = takeWhile { makeDual(get_next_user_record()) }; [% FOREACH x IN things %][% x.name %][% END %] / @things := ( <=$name> )* / ^^^^ figure out the dual for @things here ^^^ the dual logic is in the [% PERL %] directive grammar URI { rule uri { :// } rule scheme { http } rule domain { foo\.bar } } URI::uri().(scheme => 'http', domain => 'foo.bar') if ("http://..." ~~ URI::uri()) { say $; }