# Tips for WeBWorK Authors: Gotchas

Some things to watch out for when authoring WeBWorK problems.

## Perl variable with a negative value used in a (perl) formula

For example: Suppose you have a variable $a that could take on negative values, and you use it in a calculation of another variable. Warning: -$a (without a space between the minus sign and the Perl variable $a) can be misinterpreted by perl. Here are some ways to fix the possible misinterpretation: $a = random(-10,10,1);
$good1 = 2 -$a;            # Put a space before the variable
$good2 = 2 - ($a);          # Put brackets around the variable
$good3 = 2 -1*$a;           # Pre-multiply the variable by -1
$good4 = Compute("2-$a");   # Use MathObjects
$bad1 = 2-$a;               # What not do to


In summary, -$a (without a space between the minus sign and the Perl variable $a) can be misinterpreted in Perl.

## Uppercase U in MathObjects Compute (Formula)

For example: Suppose you want to display variables other than x, chosen randomly from a list of variables. In a MathObject context like Numeric, the uppercase U is interpreted as the union symbol. Thus, it is best to avoid the uppercase U as a variable in your list of choices.

Context("Numeric");
@goodvar = qw(u V W Z v w z);                       # List of variables: best to AVOID uppercase U as a variables
$x =$goodvar[random(0,$#goodvar,1)]; # Choose a variable at random$y = $badvar; Context()->variables->are($x=>"Real",$y=>"Real"); # Declare the new variables$f = Compute("2 $x^3 + 4"); # This will work for all choices in the @goodvar array of variables$g = Compute("2 $y^3 + 4"); # This won't work because U is interpreted as union in MathObject$h = "$$2 y^3 + 4$$";                            # U in a LaTeX math mode string works fine.

## Beware $a^2 in straight perl $a = 3;
$b =$a^2;          # CAREFUL! Although pg recognizes ^ as exponentiation, perl does not
$c =$a**2;         # This is the way to do exponents in perl