use strict; use warnings; my @p = (1.5, 2.5, 3.5 ); my @m = (0.5, 0.55, 0.60); sub calc { my $i = shift || 1; my $idx = ord(shift)-65; return $m[$idx] * ($p[$idx]**$i); } for my $str () { chomp($str); my $res = 1; while ($str =~ /(\d)?([A-Z])/g) { $res *= calc($1, $2); } print "$str,$res\n"; } __DATA__ 2A2B2C ABC