在Perl中绘制具有给定概率的字符

Dan*_*age 2 perl probability

我已经记录了一些字母在一组字符串中出现的频率,现在我想制作一些具有(大致)相同字母组成的随机字符串.我正在使用以下Perl代码来执行此操作.

my $random_string = "";

while(length($random_string) < $length)
{
  my $probabilities =
  {
    A => 0.2790114613,
    B => 0.1880372493,
    C => 0.2285100287,
    D => 0.3044412607,
  };
  my $test = 0;

  $test += $probabilities->{ A };
  if($rand < $test)
  {
    $sequence .= "A";
    next;
  }
  $test += $probabilities->{ B };
  if($rand < $test)
  {
    $sequence .= "B";
    next;
  }
  $test += $probabilities->{ C };
  if($rand < $test)
  {
    $sequence .= "C";
    next;
  }
  $sequence .= "D";
}
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法呢?当我不知道要考虑多少封信时,我该如何处理案件?我们可以安全地假设所有字母的概率总和为1.