- From: Ville Skyttä <ville.skytta@iki.fi>
- Date: 09 Oct 2002 10:07:33 +0300
- To: Martin Duerst <duerst@w3.org>
- Cc: public-qa-dev@w3.org
On Wed, 2002-10-09 at 07:05, Martin Duerst wrote:
> Just to make sure that I understand what's going on:
>
> my original version was:
> return $encodingA && $encodingB && $encodingA ne $encodingB;
Yep, that works.
> your first version was:
> return $encodingA && $encodingB and $encodingA ne $encodingB;
No. That was Terje's change in
<http://dev.w3.org/cvsweb/validator/httpd/cgi-bin/check.diff?r1=1.234&r2=1.235&f=h>, which actually broke things.
> your current version is:
> return (($encodingA && $encodingB) and ($encodingA ne $encodingB));
Yes. That works again, and uses the "and" Terje seems to love :)
> I think that my original version was correct, yes?
> I don't understand why you want to make a difference between
> the first logical 'and' and the second logical 'and', both
> are equivalent.
No, "and" and "&&" are *not* the same in Perl. See man perlop for
details. But I agree that I put in too many parens there. Just for
fun, try the script at the end of this message for a demonstration about
the logical and operator precedence.
That's why I personally never use the "and" form. Mixing "and" and "&&"
is always IMHO either 1) wrong 2) hard to read correctly.
> return $encodingA && $encodingB && ($encodingA ne $encodingB);
>
> Please change it to your preferred version.
Ok, this one it is.
----------------------------------------------------------------------------
#!/usr/bin/perl
sub conflict1 {
my $encodingA = shift;
my $encodingB = shift;
return $encodingA && $encodingB && $encodingA ne $encodingB;
}
sub conflict2 {
my $encodingA = shift;
my $encodingB = shift;
return $encodingA && $encodingB and $encodingA ne $encodingB;
}
print conflict1('utf-8', 'utf-8') ? "yes c1" : "no c1", "\n";
print conflict2('utf-8', 'utf-8') ? "yes c2" : "no c2", "\n";
--
\/ille Skyttä
ville.skytta at iki.fi
Received on Wednesday, 9 October 2002 03:08:00 UTC