创建唯一的ping号

时间:2013-08-09 04:11:46

标签: perl

我想在0到9999之间创建一个ping号,因为它将用于用户与其他用户进行交互。

我想到了:

sub create
{
    $ping_num = rand( 1000 + int(9000) );
}

问题是$ping_num应该是唯一的。在这种情况下,当两次调用create方法时,$ping_number的概率很小。

有关如何制作唯一随机ping号的任何想法?

2 个答案:

答案 0 :(得分:4)

此模块可能有用:Data::UUID

它可以生成UUID(通用唯一标识符),也称为GUID(全局唯一标识符)。 UUID长度为128位,保证与3400年前生成的所有其他UUID / GUID不同。

答案 1 :(得分:0)

试试这个例子。

#!/usr/bin/perl

use strict;
use warnings;

my @random_array = ();
my $random_counter = 0;

sub random_create
{
    my $r;

    # 0 - 9999; 10000 possible values
    my $MAX = 10000;

    # Reset if maximum is reached.
    # You could instead return -1 to tell the caller that maximum number of
    # random values were already generated and create another function like
    # random_reset() with same methods below.
    if ($random_counter == $MAX) {
        @random_array = ();
        $random_counter = 0;
    }

    # Generate the number.
    until (!undef($random_array[$r = int(rand($MAX))])) { }

    # Record the number.
    $random_array[$r] = 1;
    $random_counter++;

    # Return.
    return $r;
}

print random_create()."\n";