ok from what I read and understand the ${} works almost the same like the ($var) in perl.. i can explain the difference. by default, all commands are executed in "text mode" (i'll explain this later) except for commands which start with the @ character, those commands are executed in "expression mode" now in "text mode", all $-expandos are expanded -- like macros, basically, and the result is executed as a command as if you had typed it at the input prompt. The first word (before the first space) is taken as the command to run, and everythign after the first space (including any other spaces) are taken as the argument list. so in text mode, if you want to reference variables, you would do like $var1 or $var2 that does a macro substitution for the value of the var1 variable where you have $var1 in text mode, there are several "magic" expandos which have special powers. one of those magic expandos is ${...} the ${...} expando executes what is inside the curly braces in "expression mode" (i'll get to this in a little bit) and the result of the expression is macro-substituted for the expando. so for example, /assign var1 ${3 + 4} the expression 3 + 4 has the result 7 so it is substituted, ala /assign var1 7 and then the result is executed as a command with the expanded value. so taht's what ${} is. so $var1 is just the plain old value of "var1" ${...} is whatever the value of ... is, if parsed as an expression and $(...) is whatever the value of ... is, if parsed in text mode. now @ -- it depends what you mean by @var if you mean like @var = 5 then this is not @var but rather it's @ and then var = 5 in expression mode, you don't use $'s, you just use variable names and literal numbers and stuff -- if you want to include literal text, you surround the text with square brackets, ala @ var1 = [this is literal text] which is exactly the same as assign var1 this is literal text but @ also has special meaning @var1, when used as a variable name or expando, is the string length of $var1 ie, if you do /assign var1 one two three then you do $@var1 that is 13, becuase that is the length of "one two three" if you do @ length_of_var = (@var1) then $length_of_var is 13, for the same reason. but @, when used as a string-length oeprator, is totaly different than the @ which is used at the start of a command to indicate an expression that's it. any questions?