use strict; use warnings; my @p = (1.5, 2.5, 3.5 ); my @m = (0.5, 0.55, 0.60); my $a="2A2B2C"; sub calc { my $i = shift; my $j = ord(shift)-65; my $r = $p[$j]; $r *= $p[$j] for (0..$i-2); return $r * $m[$j]; } $a=~ s/([0-9]+)([A-Z])/(calc($1,"$2"))/g; $a=~ s/\)\(/)*(/g; eval "\$a = $a;"; print $a; #28.423828125