http://qs321.pair.com?node_id=1211303

From the first part of your code it looks like you are storing your variables and values in the %data hash in the form \$data{"variable name"} = "value". In order to work, your formulae have to use those variables and values in the very same format.

I would think it be useful to see a couple of examples.

Update: Here is some basic code to get you started:

```use strict;
use warnings;

my %data = ( x => 5, y => 7, z => 2 );

my @formulae = (
'x + y',
'z + 3',
'x ** z',
'a + x',
'x /= y',
'x - x'
);

for my \$formula (@formulae) {
print "Processing formula \$formula\n\t";
my @error = ();
while (\$formula =~ s|([a-z]+)|\$data{\$1}//' '|e) {
push @error, \$1 unless exists \$data{\$1};
}
if (@error) {
print "Error: unknown variable(s) @error\n\n";
} else {
my \$result = eval(\$formula);
if( defined \$result) {
print "Result: \$formula = \$result\n\n";
} else {
print "Syntax error in \$formula\n\n";
}
}
}

Replies are listed 'Best First'.
Re^2: How to evaluate a mathematical formula that is stored in another file?
by skooma (Novice) on Mar 22, 2018 at 10:06 UTC

Thanks your code greatly helped me to get part of my results. But can you explain these two lines below? Thanks.

```    while (\$formula =~ s|([a-z]+)|\$data{\$1}//' '|e) {
push @error, \$1 unless exists \$data{\$1};