=pod $ pugs -CPIL2 -e 'say "hello"' PIL_Environment { pilMain = (PStmts {pStmt = PNoop, pStmts = PStmts {pStmt = PPos {pPos = (MkPos "-e" 1 1 1 12), pExp = App (Var "&say") Nothing [Pos (MkPos "-e" 1 5 1 12) (Val (VStr "hello"))], pNode = PStmt {pExpr = PExp {pLV = PApp {pCxt = TTailCall TCxtVoid, pFun = PExp {pLV = PVar {pVarName = "&say"}}, pInv = Nothing, pArgs = [PLit {pLit = PVal {pVal = VStr "hello"}}]}}}}, pStmts = PNil}}) , pilGlob = ([PSub {pSubName = "&*END", pSubType = SubPrim, pSubParams = [], pSubLValue = False, pSubIsMulti = False, pSubBody = PNil}]) } =cut rule nam { (+) }; rule str { \" .*? \" }; rule spc { | \n }; rule block { \{ * * \= .* \} }; rule parenthesis { \( ( | ) * \) }; rule square { \[ ( | ) * \] }; rule anything { | | | | | }; rule pil2 { \{ * \} }; say "match digit - error!" if "123" ~~ //; say "match name" if "abc" ~~ //; say "match block" if '{ xxx = a123 }' ~~ //; say "match parenthesis" if '(a b c)' ~~ //; say "match square" if '[a b c]' ~~ //; say "match str" if '"abc"' ~~ //; my $pil2 = q/ PIL_Environment { pilMain = (PStmts {pStmt = PNoop, pStmts = PStmts {pStmt = PPos {pPos = (MkPos "-e" 1 1 1 12), pExp = App (Var "&say") Nothing [Pos (MkPos "-e" 1 5 1 12) (Val (VStr "hello"))], pNode = PStmt {pExpr = PExp {pLV = PApp {pCxt = TTailCall TCxtVoid, pFun = PExp {pLV = PVar {pVarName = "&say"}}, pInv = Nothing, pArgs = [PLit {pLit = PVal {pVal = VStr "hello"}}]}}}}, pStmts = PNil}}) , pilGlob = ([PSub {pSubName = "&*END", pSubType = SubPrim, pSubParams = [], pSubLValue = False, pSubIsMulti = False, pSubBody = PNil}]) } /; say $pil2; my $b = $pil2 ~~ m//; say $b.perl; my $c = $pil2 ~~ / \{ /; say $c.perl;