20

我想创建一个UniqueId。有没有我可以调用的函数,这样每次我使用它时它都会给我一个新的 ID,总是具有不同的值?

4

9 回答 9

25

使用Data::UUID生成唯一 ID:

use Data::UUID;

$ug    = Data::UUID->new;
$uuid1 = $ug->create();   # Or create_str()
于 2013-09-05T05:17:24.310 回答
8

您也可以使用它的更好方法

use UUID::Generator::PurePerl;

sub create_search_id {
    my $this =shift;
    my $args=shift;
    my $ug = UUID::Generator::PurePerl->new();
    my $uuid1 = $ug->generate_v1();
    return $uuid1;
}

从这里你可以了解UUID::Generator::PurePerl

于 2013-09-05T05:19:39.897 回答
6

使用Data::GUID的另一种选择

use Data::GUID;
my $guid = Data::GUID->new;
my $uniqueIdString = guid->as_string;

或者

use Data::GUID;
my $uniqueIdString = Data::GUID->new->as_string;
于 2013-12-02T18:35:34.897 回答
5

可能值得注意的是,在 Windows 机器上,您也可以使用 Win32:

use Win32;    
my $guid = Win32::GuidGen();
于 2016-09-08T15:18:19.630 回答
2

如果您对可以使用的模块有一些限制,并且您在 Linux 上运行脚本,则可以使用以下解决方法:

my $uuid = `cat /proc/sys/kernel/random/uuid`;

您无需在系统上安装新软件包即可使用它。

于 2020-05-12T12:00:47.673 回答
1

我使用了 Data::Uniqid,这个模块有 3 个方法:

use Data::Uniqid qw ( suniqid uniqid luniqid );
$id = suniqid; #genrates a very short id valid only for the localhost and with a liftime of 1 day
$id = uniqid;  #generates a short id valid on the local host 
$id = luniqid; #generates a long id valid everywhere and ever
于 2013-09-05T06:50:05.020 回答
1

我也非常喜欢uuidgen在这个答案中使用 Linux OS 工具的想法: Perl 中的版本 5 UUID

在我的 Debian Linux 系统上,我有它/usr/bin/uuidgen

于 2019-12-27T04:40:08.400 回答
-1

尝试这个:

Perl 中的 Firebase 样式推送 id guid

它按照生成时间的字母顺序生成一个 guid。如果您想按照生成的时间顺序对记录 guid 进行排序,这很有用。

于 2018-06-28T22:43:16.387 回答
-1

set将您想要的字符混合到数组中UUID

use warnings;
use feature 'say';

say "Generate passwords\n";
say genPass(16) for (0..10);
say '';
say "Generate UUIDs\n";
say genUUID() for (0..10);

sub genPass {
    my $len = shift;
    my @set = ('A'..'Z','a'..'z',0..9,split('','~!@#$%^&*()_+{}[]-=;:<>?"\''));
    my $num = $#set;
    my $uuid;

    $uuid .= $set[rand($num)] while $len--;

    return $uuid;
}

sub genUUID {
    my $uuid;
    my @set = ('a'..'z',0..9);
    my $num = $#set;

    $uuid .= $set[rand($num)] for 1..8;
    $uuid .= '-';
    for (1..3) {
        $uuid .= $set[rand($num)] for 1..4;
        $uuid .= '-';
    }

    $uuid .= $set[rand($num)] for 1..12;

    return $uuid;
}

输出样本

Generate passwords

yWXjV{{z0=6T-NVt
<ETH0(9IETcb[c!=
]cONV~*6PoTp1L~<
F8Ve>^u<Hymq]ZFd
<fdV(Z[~EUE?_Ufe
9A9y*iJ3Wta:jg*Y
7r2pP<1voI@x=cFe
Z7bZdha+U;:7aAeT
c2?a7S"mEpt%q43V
uC^q5]iPg~8E4CwJ
gwK+CBM?bnvgS@hg

Generate UUIDs

arrle2tc-x414-o8qi-i82f-obmwrbumlows
xmeg8ekk-ka2m-k4vo-l6xn-lor2s3z1lgn4
35d36bfr-jngc-6qiv-ubq8-nlysa2oaja12
m6yi4joo-1lpv-8obg-zjed-yesyqnq6rjxh
d3edwfbf-znwo-8s2o-4ld3-vntd20ps1fe5
twim8wr7-z0jj-0a20-uypt-sk80yubnaj8h
b4fkoodo-sp16-sa0h-2nlm-kicej06wlwn6
1r1rjy50-2wjo-620t-5ffn-5quw5qjztdfo
tr005kl0-k6yt-syz2-nrhq-k83ghybxjzm1
opxm1mjz-mvu8-feyf-if5o-411zayail60w
380v388j-acct-3zap-0nty-688b04eozrkx
于 2020-05-12T17:40:39.813 回答