> > The only extra piece of syntactic sugar that C<rx> is giving us over > > C<rule>[*] is the ability to have arbitrary delimiters. > > Not quite arbitrary. Alphanumerics aren't allowed, nor are colon or > parens.
Aww, no alphanumerics anymore. That's too bad; it was so nice in poetry to be able to write: m editate and s erpentine > > Or, to put it more succinctly: do there exist two pieces of > > *syntactically correct* code like > > ... rule ... > > and > > ... rx ... > > (where the ... are identical in both) which each produce *valid* and > > *different* semantics? > > Yes. For example: > > sub foo; > > foo rule ($arg) { $var := <$arg> }; > foo rx ($arg) { $var := <$arg> }; > > The first means: > > foo # Call foo > rule # Passing a single pattern > ($arg) # That takes a single parameter > { > $var := # And binds hypothetical $var... > <$arg> # ...to what the parameter (treated as a pattern) >matches > } > ; > > The second means: > > foo # Call foo > rx ( # Pass, as its first argument, a pattern... > $arg # ...that matches the contents of $arg as a literal >string > ) # No comma needed after first arg since next arg >is... Hang on... I thought parens weren't allowed as delimiters. Or does that not apply to rx()? > { # ...a closure... > $var := <$arg> # ...that binds $var to a stream iterator over $arg > } > ; > > > In other words, the second is the same as: > > foo rule {$arg}, sub{ $var := <$arg> }; Luke