#! /usr/bin/perl @w = ('h','a','!'); @S = ('s1','s2'); %a = ( s0 => {s1 => 1.0}, s1 => {s1 => 0.6, s2 => 0.2, se => 0.2}, s2 => {s1 => 0.4, s2 => 0.4, se => 0.2} ) ; %b = ( s1 => {h => 0.6, a => 0.1, '!' => 0.3}, s2 => {h => 0.1, a => 0.7, '!' => 0.2} ) ; foreach $s (@S) { ${$alpha[0]}{$s} = ${$a{s0}}{$s} * ${$b{$s}}{$w[0]}; } for ($i=0;$i < $#w ;$i++){ foreach $s (@S) { foreach $sbar (@S) { ${$alpha[$i+1]}{$s} += ${$alpha[$i]}{$sbar} * ${$a{$sbar}}{$s}; } ${$alpha[$i+1]}{$s} *= ${$b{$s}}{$w[$i+1]}; } } foreach $s (@S) { $p += ${$alpha[$#w]}{$s}*${$a{$s}}{'se'}; } print "$p\n";