开发者

rand() not so random in perl

I have a Perl script that gives me a 50 character string of random numbers, letters and some special characters. I am inputting them in a database. Now, given the length of the string and the amount of characters, I wouldn't think that duplicates would be easily created.

Here's the nifty nugget of code that creates the string:

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

It produces strings like:

C1Qt8L7开发者_运维问答E7QUD%lkxnh9yjZ2njF0iMj!1o^4DmTbVNhQB9%dke@

The problem is it will duplicate an exact string every once and a while among unique ones, and more than once on some strings. And this is out of say 20 strings. It's bizarre. I can work around it and find a solution... but this perplexes me a bit. Would like to know why. Anybody have an idea?


You need to use srand to seed the random number generator otherwise it will generate the same number series.

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

Edit:

According to the doc atthe url, if the perl version is before 5.004 then it won't automatically call that function. So check the perl version you're running under.


you can also see String::Random - for generating random strings based on a pattern.


For GOOD random numbers, consider using Math::Random::MT.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜