$$ is very useful. It's *not* meant for verified parameters, it's meant to verify parameters:

Code:
/o mode # +o $$1


The above alias will not run if you don't supply a parameter. This avoids an error message from the server. If you *were* to provide your own error message, you would need to use $1, not $$1.

Return or halt doesn't make a difference here, since $$* isn't meant to be used in deep stacks. Halt, however, does make sense in the context of parameter verification, since you would want to halt in this situation:

Code:
/kb ialban $1 | kick # $1
/ialban mode # +b $$address($1, 2)


If $$* did /return in the above, you would still perform the kick even if you could not perform a ban, because /ialban would return, not halt the entire stack. That's usually not what you want from a kickban. Similar problems arise when you move parameter verification one alias down the stack, which is commonly done when you refactor larger scripts.

Finally, stop complaining. If you don't like the language, go find one you like and use it. mIRC is not complicated-- in fact, it's ridiculously simple. "$$* will /halt if the identifier expands to $null" is a simple rule. I can name hundreds of languages that have orders of magnitude more syntax rules, keywords and semantic gotchas. Java, C++, Scala all come to mind, but it's completely irrelevant. Khaled isn't going to redesign the entirety of mIRC's scripting language just because one person got mad that his bug report wasn't actually a bug and refused to admit it was PEBKAC. If you don't understand a feature, just don't use it. That is simple.


- argv[0] on EFnet #mIRC
- "Life is a pointer to an integer without a cast"