2013-08-09 2 views
0

Я хочу создать номер ping между 0 и 9999, потому что он будет использоваться для взаимодействия с другими пользователями.Создание уникального номера ping

Я думал:

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

Проблема заключается в том, что $ping_num должен быть уникальным. В этом случае существует небольшая вероятность того, что, когда метод create вызывается дважды, $ping_number будет таким же.

Любые идеи о том, как сделать уникальный случайный номер пинга?

+0

Сохранять сгенерированные числа и сопоставлять их со списком, а когда они больше не используются, удалите его? – Prix

+1

Что вы будете делать для пользователя 10001st? – pilcrow

+0

mmmm теперь это хороший вопрос – ado

ответ

4

Этот модуль может быть полезным: Data::UUID

Он может генерировать UUID, (Универсально уникальные идентификаторы), также известный как GUIDs (глобально уникальные идентификаторы). UUID имеет длину 128 бит и гарантированно отличается от всех других UUID/GUID, сгенерированных до 3400 года.

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"; 
+0

, почему у вас есть {} после до – ado

+0

@adriancdperu до тех пор, пока не будет единственной целью, чтобы получить уникальное случайное число, чтобы {} ничего не делал. – konsolebox

+0

@adriancdperu Я видел ваше редактирование, но я сделал исправление уже раньше. – konsolebox

Смежные вопросы