我想创建一个 唯一标识符 (UniqueId)。是否有函数可供调用,每次使用时都会给我一个新的 ID,并始终具有不同的值?
我想创建一个 唯一标识符 (UniqueId)。是否有函数可供调用,每次使用时都会给我一个新的 ID,并始终具有不同的值?
使用 Data::UUID 生成唯一标识符:
use Data::UUID;
$ug = Data::UUID->new;
$uuid1 = $ug->create(); # Or create_str()
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;
}
如果您有一些使用模块的限制,并且您正在Linux上运行脚本,您可以使用这个解决方法:
my $uuid = `cat /proc/sys/kernel/random/uuid`;
$uuid = do { open my $fh, "/proc/sys/kernel/random/uuid" or die $!; scalar <$fh> };
。 - Slaven Rezic使用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;
值得注意的是,在Windows计算机上,您还可以使用Win32:
use Win32;
my $guid = Win32::GuidGen();
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
我也很喜欢在这个答案中使用Linux操作系统工具uuidgen
的想法:
Perl中的5版本UUID
在我的Debian Linux系统上,它位于/usr/bin/uuidgen
将你想要出现在你的UUID
中的字符混合到set
数组中
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
在 Perl 中生成 Firebase 风格的 push id guid
它按生成时间的字母顺序生成一个 guid。如果您想按生成时间对记录 guids 进行排序,这将非常有用。