On Sun, Sep 14, 2008 at 04:18:44PM +0200, Carl Mäsak wrote: > Conrad (>): > > Is there something more up-to-date concerning "Perl 6 best practices" that > > are presently-recommended (by p6l or @Larry) than the following item on the > > Perl 6 wiki? > [...] > That said, I do have one Perl 6-specific "best practice". I know > you're looking for a collection, but one's a start. :) Here it is: > > Do not combine 'ne' and '|', like this: > > die "Unrecognized directive: TMPL_$directive" > if $directive ne 'VAR' | 'LOOP' | 'IF'; > [...] > The more general advice, then, would be not to use junctions together > with negated equality operators. Instead, use the non-negated equality > operator, and negate the whole expression.
This particular case is explicitly mentioned in S03:2529: Use of negative operators with syntactically recognizable junctions may produce a warning on code that works differently in English than in Perl. Instead of writing if $a != 1 | 2 | 3 {...} you need to write if not $a == 1 | 2 | 3 {...} However, this is only a syntactic warning, and if $a != $b {...} will not complain if $b happens to contain a junction at runtime. We might be able to craft a similar warning in Rakudo, but I'm curious to see how/where STD.pm will choose to handle this. (My guess is it will have something to do with infix_prefix_meta_operator:<!>, although we also have to have a way to handle it for the infix:<!=> and infix:<ne> cases.) Pm