# from Carl Mäsak
# on Sunday 14 September 2008 07:18:
>die "Unrecognized directive: TMPL_$directive"
> if $directive ne 'VAR' | 'LOOP' | 'IF';
>
>One is tempted to assume that this means the same as
>"$directive ne 'VAR' || $directive ne 'LOOP' || $directive ne 'IF'",
>but it doesn't.
Actually, it does mean exactly that.
But you're not really tempted to read it as:
if this isn't "var" or else this isn't "loop" or else this isn't "if"
(in denial?). Instead, one is tempted to read it as:
if this is not: 'var', 'loop', or 'if'
, by which you really mean:
if this is not 'var' and this is not 'loop' and this is not 'if'
or:
if not this is any of: 'var', 'loop', or 'if'
which is:
unless this is any of: 'var', 'loop', or 'if'
or:
if this is not all of: 'var', 'loop', and 'if'
But perhaps the thing to remember is to not mix negated operators with
disjunctions? The 'dis' being a form of negative and all.
I found this in E06:
if %person{title} ne $known_title { ... }
Well... I guess E06 is unmaintained, but currently has the best
explanation of junctions I can find, so I offer the attached patch in
the hope that the logic error does not propagate.
--Eric
--
But you can never get 3n from n, ever, and if you think you can, please
email me the stock ticker of your company so I can short it.
--Joel Spolsky
---------------------------------------------------
http://scratchcomputing.com
---------------------------------------------------
Index: exe/E06.pod
===================================================================
--- exe/E06.pod (revision 14582)
+++ exe/E06.pod (working copy)
@@ -857,6 +857,15 @@
print "Unknown title: %person{title}.";
}
+[Update: that was a logic error: the negated operator carries through
+the disjunction and is always false.
+
+ unless %person<title> eq $known_title {
+ say "Unknown title: %person<title>.";
+ }
+
+Hash key quoting has also changed.]
+
or even C<Code> references:
my &ideal := \&tall & \&dark & \&handsome;