t/op/lex_assign.t See if ops involving lexicals or pad temps work
t/op/list.t See if array lists work
t/op/local.t See if local works
+t/op/lop.t See if logical operators work
t/op/magic.t See if magic variables work
t/op/method.t See if method calls work
t/op/misc.t See if miscellaneous bugs have been fixed
case OP_AV2ARYLEN:
PL_hints |= HINT_BLOCK_SCOPE;
case OP_SASSIGN:
+ case OP_ANDASSIGN:
+ case OP_ORASSIGN:
case OP_AELEMFAST:
PL_modcount++;
break;
case OP_READ:
case OP_SYSREAD:
case OP_RECV:
- case OP_ANDASSIGN: /* may work later */
- case OP_ORASSIGN: /* may work later */
+ case OP_ANDASSIGN:
+ case OP_ORASSIGN:
return TRUE;
default:
return FALSE;
--- /dev/null
+#!./perl
+
+#
+# test the logical operators '&&', '||', '!', 'and', 'or', 'not'
+#
+
+BEGIN {
+ chdir 't' if -d 't';
+ unshift @INC, '../lib';
+}
+
+print "1..7\n";
+
+my $test = 0;
+for my $i (undef, 0 .. 2, "", "0 but true") {
+ my $true = 1;
+ my $false = 0;
+ for my $j (undef, 0 .. 2, "", "0 but true") {
+ $true &&= !(
+ ((!$i || !$j) != !($i && $j))
+ or (!($i || $j) != (!$i && !$j))
+ or (!!($i || $j) != !(!$i && !$j))
+ or (!(!$i || !$j) != !!($i && $j))
+ );
+ $false ||= (
+ ((!$i || !$j) == !!($i && $j))
+ and (!!($i || $j) == (!$i && !$j))
+ and ((!$i || $j) == ($i && !$j))
+ and (($i || !$j) != (!$i && $j))
+ );
+ }
+ if (not $true) {
+ print "not ";
+ } elsif ($false) {
+ print "not ";
+ }
+ print "ok ", ++$test, "\n";
+}
+
+# $test == 6
+my $i = 0;
+(($i ||= 1) &&= 3) += 4;
+print "not " unless $i == 7;
+print "ok ", ++$test, "\n";