summaryrefslogtreecommitdiff
path: root/t/op/lop.t
diff options
context:
space:
mode:
authorGurusamy Sarathy <gsar@cpan.org>1999-02-12 12:40:17 +0000
committerGurusamy Sarathy <gsar@cpan.org>1999-02-12 12:40:17 +0000
commitbf4b1e527fdf3e0133164c452edf2a3c4cdc8b41 (patch)
tree7ab975037fcd65d70d1d7c6b486996741e01b2e3 /t/op/lop.t
parentac5c734f32ccd9787762253192de0d559609abae (diff)
downloadperl-bf4b1e527fdf3e0133164c452edf2a3c4cdc8b41.tar.gz
allow boolean assign ops to be lvalues
From: Stephen McCamant <smccam@uclink4.berkeley.edu> Date: Mon, 11 Jan 1999 16:52:18 -0600 (CST) Message-ID: <13978.32609.495338.544643@alias-2.pr.mcs.net> -- From: Hugo van der Sanden <hv@crypt.compulink.co.uk> Date: Mon, 18 Jan 1999 10:04:00 +0000 Message-Id: <199901181004.KAA17471@crypt.compulink.co.uk> Subject: Re: [inconsistency 5.005_54] ||= not an lvalue p4raw-id: //depot/perl@2901
Diffstat (limited to 't/op/lop.t')
-rwxr-xr-xt/op/lop.t44
1 files changed, 44 insertions, 0 deletions
diff --git a/t/op/lop.t b/t/op/lop.t
new file mode 100755
index 0000000000..f15201ff09
--- /dev/null
+++ b/t/op/lop.t
@@ -0,0 +1,44 @@
+#!./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";