Rand()在perl中不是那么随意

时间:2010-12-06 04:58:06

标签: perl random

我有一个Perl脚本,它给我一个50个字符的随机数字,字母和一些特殊字符串。我正在数据库中输入它们。现在,考虑到字符串的长度和字符数量,我不认为可以轻松创建重复项。

这是创建字符串的代码的漂亮块:

my $random_id='';
my @c = ( "A" .. "Z", "a" .. "z", 0 .. 9, qw(! @ $ % ^ & *) );
$random_id = join '', map $c[rand @c] , 1 .. 50;

它产生如下字符串:

  

C1Qt8L7E7QUD%lkxnh9yjZ2njF0iMj!1O ^ 4DmTbVNhQB9%DKE @

问题是它会在唯一的字符串中每隔一段时间复制一次精确的字符串,而在某些字符串上会复制一次。这是20个字符串。这很奇怪。我可以解决它并找到解决方案......但这让我感到困惑。想知道为什么。有人有想法吗?

3 个答案:

答案 0 :(得分:8)

您需要使用srand为随机数生成器播种,否则它将生成相同的数字序列。

http://perldoc.perl.org/functions/srand.html

编辑:

根据url url的说明,如果perl版本在5.004之前,则它不会自动调用该函数。因此,请检查您正在运行的perl版本。

答案 1 :(得分:3)

您还可以看到String::Random - 用于根据模式生成随机字符串。

答案 2 :(得分:3)

对于GOOD随机数,请考虑使用Math::Random::MT