Nah, the comma's serve as parameter delimiters in identifiers, just like spaces serve as delimiters in commands. The commas that touch identifiers or variables within identifiers are harmless as they serve as the delimiters.

You could know this yourself with a simple test btw:

//echo -a $mid($me,2,-1) will evaluate correctly, instead of evaluating the identifier "$me,2,-1", because mIRC sees this:

3 params:

1 = $me
2 = 2
3 = -1

//var %a = 1, %b = 9 | echo -a $rand(%a,%b)

This won't evaluate the variable "%a,%b" which is a perfectly valid variable, instead mIRC sees this:

2 params:

1 = %a
2 = %b

Thus evaluating them correctly.

If we would in fact like the variable "%a,%b" evaluate, we would use evaluation brackets like this:

//set %a,%b 1 | set %c,%d 9 | echo -a $rand( [ %a,%b ] , [ %c,%d ] )

The reason for the evaluation brackets is simple: we don't want $rand to be confused with all those comma's, which it surely will, because $rand takes 2 parameters seperated by 1 comma, so it would give an error.

The reason to use evaluation brackets is to force order of evaluation again. Let's see what mIRC would do with our above code:

Before calling $rand's internal code, which takes two parameters, it first evaluates the parameters, from left to right.

It sees %a followed by a comma so it thinks: ok I found my first parameter %a now let's go to the second parameter which is what's following the comma. This is %b and so far so good. But %b is also followed by a comma, which means there is atleast 1 more parameter (3 or more) though $rand only takes 2 parameters so the following code:

//set %a,%b 1 | set %c,%d 9 | echo -a $rand( %a,%b , %c,%d )

gives you the error: * Too many parameters: $rand, which is logic because when ordering it like this:

$rand( %a , %b , %c , %d ), you can clearly see there are 4 parameters, due to the commas.

With the use of evaluation brackets, we force our two parameters to evaluate first, which they both do to their respective values 1 and 9, and now mIRC sees the identifier $rand with two parameters 1 and 9, which is perfectly valid.

Note that I don't use the /var command to show you this because as you know you can set multiple variables with the /var command, so it would see //var %a,%b as the initializing of variables %a and %b, whilst we want to initialize the variable %a,%b.


Gone.