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

Pau*_*ton 6 random perl

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

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

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

它产生如下字符串:

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

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

Pau*_*aul 8

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

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

编辑:

根据url url的文档,如果perl版本在5.004之前,那么它将不会自动调用该函数.因此,请检查您正在运行的perl版本.

  • @Xiquid:轻微且几乎不相关的细节,但我怀疑你的意思是你使用的是Perl 5.10(5.9之后和5.11之前)而不是5.1(这将是真正古老的,1995年发布为Perl 5.001) - 版本数字不是正确的小数.虽然,如果你在5.001,我想这可以解释`rand`在它第一次被叫时不会自动播种...... (3认同)