Daniel D Jones wrote:
> Given something like the following:
>
> my @variables = [3, 7, 13, 4, 12];
You want round brackets here. You've created an array with just one element,
with a reference to an anonymous array as its value.
> my @tests = ("2*a+b==c", "c-d+a==e");
>
> I need to be able to evaluate the mathematical truth of the tests, using the
> values from @variables, where $variable[0] holds the value of the
> variable 'a', $variables[1] holds the value of 'b', etc. I can do the
> evaluation but how do I (reasonably efficiently) substitute the values into
> the strings? (The length of the array and the exact tests are not known
> until run time.)
>
> In C, I'd do this by walking through the test strings character by character,
> checking for isalpha, converting the character to its ascii value and
> subtracting the ascii value of 'a', and indexing into the array. In Perl I'm
> not sure how to do this type of low level character by character processing.
> The only thing which occurs to me is to split() the string into an array of
> characters, then walk through that array. Am I on the right track or is
> there an easier way to do this in Perl?
Hi Daniel.
You can do exactly that in Perl, and a lot more simply:
my @variables = (3, 7, 13, 4, 12);
my @tests = ("2*a+b==c", "c-d+a==e");
foreach (@tests) {
s/([a-z])/$variables[ord($1) - ord('a')]/ge;
print $_, "\n";
}
OUTPUT
2*3+7==13
13-4+3==12
HTH,
Rob
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>