微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在Perl中,如何生成由八个十六进制数字组成的随机字符串?

使用Perl,不使用任何不带ActivePerl的额外模块,如何从0-F创建一个包含8个字符的字符串.例如0F1672DA?填充应该是可控的,最好是8个字符.

我想要生成的字符串种类的更多示例:

28DA9782
55C7128A

解决方法

原则上,你应该能做到
#!/usr/bin/env perl

use strict; use warnings;

for (1 .. 10) {
    printf "%08X\n",rand(0xffffffff);
}

但是,您可能会发现 – 至少在某些系统上有一些perls(如果不是全部) – range of rand is restricted to 32,768 values.

您还可以学习String::Random的源代码,以了解如何生成满足其他条件的随机字符串.

但是,我不建议在Windows系统上使用内置兰特.有关高质量RNG,请参阅Math::Random::MT.

#!/usr/bin/env perl

use strict; use warnings;

my @set = ('0' ..'9','A' .. 'F');
my $str = join '' => map $set[rand @set],1 .. 8;
print "$str\n";

PS:The issue with Perl’s rand on Windows was fixed in 5.20

This meant that the quality of perl’s random numbers would vary from platform to platform,from the 15 bits of rand() on Windows to 48-bits on POSIX platforms such as Linux with drand48().

Perl Now uses its own internal drand48() implementation on all platforms. This does not make perl’s rand cryptographically secure. [perl #115928]

原文地址:https://www.jb51.cc/Perl/172144.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐