in reply to A question about Alias module and use strict

It may or may not contain all the variables I have functions for.
Herein lieth the nub of your problem. To avoid the "Use of uninitialized ..." you need to provide a default value for your variables, instead of just letting them be undef.

However, this is non-trivial in your case. I recommend detecting any variables used by your expression, and populating %value_hash with default values. Warning: untested code

foreach ($function_hash{$foo} =~ /\$(\w+)/g) { $value_hash{$1} = 0; # default value }
hth

--rW