x
x
x


Do so in a way which:

 does not involve string manipulation of the input source code
 is plausibly extensible to a runtime-chosen set of bindings rather than just x
 does not make x a global variable


or note that these are impossible.



See also

 For more general examples and language-specific details, see Eval.
 Dynamic variable names is a similar task.


proc eval_twice {func a b} {
    set x $a
    set 1st [expr $func]
    set x $b
    set 2nd [expr $func]
    expr {$2nd - $1st}
}
 
puts [eval_twice {2 ** $x} 3 5] ;# ==> 24