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
@badvar = qw(U);
$x = $goodvar[random(0,$#goodvar,1)]; # Choose a variable at random
$y = $badvar[0];
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