in reply to strict, typeglobs, and evaluation order

add_var is defined out of the scope of strict. Also, strict does not mean you can only use subroutines defined by the classical sub name {...} (cf. AUTOLOAD). It means you cannot use barewords for undeclared subroutines - try removing the parentheses when calling the subroutines.
لսႽ† ᥲᥒ⚪⟊Ⴙᘓᖇ Ꮅᘓᖇ⎱ Ⴙᥲ𝇋ƙᘓᖇ