On Fri, Sep 16, 2005 at 07:51:48AM -0700, Marc Perkel wrote:
> OK - I want to throw out a proposal to make a major change to Exim - the 
> scripting language. And before you all start screaming - the idea would 
> be to leave the existing language in for compatibility.

I guess I used up my supply of suggestions for radical changes for this
week, so let me suggest a change not as large. :-)

You describe a problem I thought about before as well.  I am sure Philip
can tell me what I overlook.

Exim does support boolean expressions as first argument to "if", so it
has an idea of typing, but conditions do not take boolean expressions,
but strings as input.

>  condition = "${if and { \
>                        {!eq {$interface_address}{127.0.0.1}} \
>                        {!def:h_X-Spam-Status:} \
>                        {!def:h_X-Mailman-host:} \
>                        {!eq {$received_protocol}{ctyme-spam-scanned}} \
>                        {!eq {$received_protocol}{local}} \
>                        } {1}{0}}"

Right, that's the problem, and it is not even as bad as it gets
sometimes.  I would be glad if I could write it that way already:

  condition = and {
                        !eq {$interface_address}{127.0.0.1}
                        !def:h_X-Spam-Status:
                        !def:h_X-Mailman-host:
                        !eq {$received_protocol}{ctyme-spam-scanned}
                        !eq {$received_protocol}{local}
                        }

In this example "if" is removed, as "condition" takes a boolean
expression.  Further, "and" takes a list of boolean expressions,
too.  Since the whole is not a string, but a boolean expression,
backslashes are not needed.

You suggest to modify "eq" from a function to an operator.  I think
the expansion language is purely functional.  Operators would introduce
associativity and precedence and I am not sure I would like that.  It is
way easier for simple examples, and allows a whole new class of mistakes
for more complicated ones.

Somehow I have a feeling, though, that I miss some fundamental aspect
that explains why "condition" works the way it does and that's why I
didn't suggest the above before.

Michael

-- 
## List details at http://www.exim.org/mailman/listinfo/exim-users 
## Exim details at http://www.exim.org/
## Please use the Wiki with this list - http://www.exim.org/eximwiki/

Reply via email to