That's because [ ] brackets and $eval are not the same thing; they are designed for different purposes. $eval evaluates any variables/identifiers in the string and only that. Brackets, otoh, control the order of evaluation, something that $eval was not designed to do of course. So, in $rgb( [ %var ] ) , mirc evaluates %var before it deals with $rgb. (contrary to $rgb(%var), in which %var is evaluated after $rgb is parsed, so %var is considered a parameter).