Unbalanced Parenthesis
In PennMUSH, the following is legal, while is not in SharpMUSH:
think add(1,2> 3Instead, complete the parenthesis.
think add(1,2)> 3Planning to move a live game? Compatibility findings are inputs to a rehearsal, not proof that an import is ready for players. Use the PennMUSH migration runbook to test your own identities, data, softcode, connection paths, portal, and integrations.
SharpMUSH does away with some of the more unique aspects of PennMUSH parser curiosities.
Unbalanced Parenthesis
In PennMUSH, the following is legal, while is not in SharpMUSH:
think add(1,2> 3Instead, complete the parenthesis.
think add(1,2)> 3Forgiving Parenthesis
In PennMUSH, the following is legal, while is not in SharpMUSH:
lsearch(all,eval,\[strmatch(##,%#)\])> #1Instead, escape all the contents. This is also needed for #lambda evaluation.
lsearch(all,eval,\[strmatch\(##\,%#\)\])> #1Full Recursion Parsing
In PennMUSH, TinyMUX, etc, you can do the following:
&fn me=ucstr; think [v(fn)](foo)> FOOInstead, use callfn() to call the intended function.
&fn me=ucstr; think callfn(v(fn),foo)> FOOThis is an awesome feature of MUSH-likes, but we explicitly do not support this, as it makes the parser non-deterministic, ambiguous and harder to maintain. Most existing Softcode does not rely on this behavior however.
## Double-Evaluation
In PennMUSH, ## inside iter() performs double-evaluation, meaning the substitution result is evaluated again as MUSHcode:
iter(\[if(true\,red\,white)\],##,)> redIn SharpMUSH, ## is substituted as %iL (a literal reference), so the result is returned as-is without further evaluation:
iter(\[if(true\,red\,white)\],##,)> [if(true,red,white)]If double-evaluation is needed, use s() or objeval() to explicitly evaluate the result.