>>>>> "DAP" == Deborah Ariel Pickett <[EMAIL PROTECTED]> writes:

  DAP> C<rule> allows us to define both named and anonymous rules, depending on
  DAP> context.  C<rx> allows us to define only anonymous rules.  C<rule> is
  DAP> the more general one, and you can use it exclusively if that's what you
  DAP> feel like.

  DAP> The only extra piece of syntactic sugar that C<rx> is giving us over
  DAP> C<rule>[*] is the ability to have arbitrary delimiters.  If I were
  DAP> satisfied with always using C<{}> as delimiters for C<rx> then a
  DAP> program would run the same if I did a C<s:each/rx/rule/> on it.


not in one case. if you had named rules then you couldn't do that
substition as rx// has no syntax for a name. i assume you could use the
:= op to alias an rx to a name and that should be the same as a named
rule.


  DAP> Now . . .

  DAP> Is there some _syntactic_ constraint (i.e., required by the parser)
  DAP> that requires C<rule> to use braces for delimiters?  That is, shouldn't
  DAP> the following:
  DAP>   $config_line = rule ($ident) { <$ident> = \N* }
  DAP> always be parseable for any given value of C<{> and C<}> (barring
  DAP> obvious exceptions like colons and parentheses)?

no, rules are like subs there and only {} are allowed. 

  DAP> Or, to put it more succinctly: do there exist two pieces of
  DAP> *syntactically correct* code like
  DAP>   ... rule ... 
  DAP> and
  DAP>   ... rx ...
  DAP> (where the ... are identical in both) which each produce *valid* and
  DAP> *different* semantics?

not that i can see. they are just syntactic variants with some slight
differences (naming vs delimiters).

  DAP> To me, that'd be the only reason for C<rx> and C<rule> to be
  DAP> different keywords. [**] Especially since we're making such a big
  DAP> deal about patterns and subroutines having lots of parallels.
  DAP> The same parallel doesn't exist for subroutines[***]; why should
  DAP> it for pattern matching?

rx// is closer to how qr// works and looks in perl 5. so if you just
want to create a anon regex, then this would look familiar

        $re = rx/ blah / ;      # whitespace always allowed now

rule could be used there but it is longer and not similar to perl5

        $re = rule { blah } ;


  DAP> [**] As opposed to C<rx> and C<rule> being two different spellings of
  DAP> the same keyword, something I don't object to.

they aren't different spellings. they have different syntax but the same
semantics.

uri

-- 
Uri Guttman  ------  [EMAIL PROTECTED]  -------- http://www.stemsystems.com
----- Stem and Perl Development, Systems Architecture, Design and Coding ----
Search or Offer Perl Jobs  ----------------------------  http://jobs.perl.org

Reply via email to