in reply to regex and string functions help needed.

valanp,
first of all, you have changed the original content of your node without leaving notice. This will confuse future readers. Please don't do that.

As for your problem: next time please include complete sample data and input/expected output specs. In your OP there was only one special case.

Anyway, here is a subroutine for you that solves your problem:
use warnings; use strict; use Data::Dumper; my %value = ( A => 2.74, B => 2.64, C => 2.5, ); my %factor = ( A => 50/100, B => 55/100, C => 60/100, ); sub calc { # fetch arguments my $expression = shift; my $values = shift; my $factors = shift; # build an array of normalized terms # (normalize = replace non existant factors by 1) # as in 4ABC => 4A 1B 1C my @term; while ( $expression =~ /([0-9]*)([A-Z])/g ) { push @term, [$1?$1:1, $2]; } # now iterate over that array and do the # calculation my $result = 1; $result *= $_->[0] * $values->{$_->[1]} * $factors->{$_->[1]} for @term; return $result; } print calc ("4ABC", \%value, \%factor), "\n"; print calc ("2A2B2C", \%value, \%factor), "\n"; print calc ("3C", \%value, \%factor), "\n"; print calc ("ABC", \%value, \%factor), "\n";


holli, /regexed monk/