Author: lwall Date: 2010-02-24 19:26:58 +0100 (Wed, 24 Feb 2010) New Revision: 29828
Modified: docs/Perl6/Spec/S03-operators.pod Log: [S03] when and ~~ to warn on direct use of "True" or "False" Modified: docs/Perl6/Spec/S03-operators.pod =================================================================== --- docs/Perl6/Spec/S03-operators.pod 2010-02-24 18:11:54 UTC (rev 29827) +++ docs/Perl6/Spec/S03-operators.pod 2010-02-24 18:26:58 UTC (rev 29828) @@ -16,7 +16,7 @@ Created: 8 Mar 2004 Last Modified: 19 Feb 2010 - Version: 193 + Version: 194 =head1 Overview @@ -3464,6 +3464,8 @@ Any .[...] array value slice truth ?all(X) i.e. ?all(.[...]) Any .{...} hash value slice truth ?all(X) i.e. ?all(.{...}) Any .<...> hash value slice truth ?all(X) i.e. ?all(.<...>) + Any True ~~ True (parsewarn) + Any False ~~ False match (parsewarn) Any Bool simple truth X Any Numeric numeric equality +$_ == X @@ -3680,8 +3682,18 @@ when .Bool == 0 {...} } -Better, just use an C<if> statement. +Better, just use an C<if> statement. In any case, if you try to smartmatch +with C<~~> or C<when>, it will recognize C<True> or C<False> syntactically +and warn you that it won't do what you expect. The compiler is also allowed +to warn about any other boolean construct that does not test C<$_>, to the +extent it can detect that. +In a similar vein, any function (such as C<grep>) that takes a +C<Matcher> will not accept an argument of type C<Bool>, since that +almost always indicates a programming error. (One may always use +C<*> to match anything, if that's what you really want. Or use a closure +that returns a constant boolean value.) + Note also that regex matching does I<not> return a C<Bool>, but merely a C<Match> object that can be used as a boolean value. Use an explicit C<?> or C<true> to force a C<Bool> value if desired.