【问题标题】:Random generation of ipv6 address in perlperl中随机生成ipv6地址
【发布时间】:2016-03-31 09:33:21
【问题描述】:

我必须使用 Perl随机生成 IPV6 地址。

请帮帮我。

【问题讨论】:

标签: perl ipv6


【解决方案1】:

不清楚您是否只想要任何 128 位模式,或者您是否需要跳过reserved IP addresses

这个程序解决了最基本的解释

use strict;
use warnings 'all';
use feature 'say';

my $ipv6 = join ':', map { sprintf '%04X', rand 0x10000 } 1 .. 8;

say $ipv6;

输出示例

FDFE:5E91:137C:8482:DCB2:03D9:2C1D:8A75

【讨论】:

    【解决方案2】:

    如果你需要一个包含一些 ipv6-address 的字符串,你可以使用这个代码:

    my $addr_str = '';
    $addr_str .= (($_) ? ':' : '') . sprintf "%04x", rand 0xFFFF + 1 for 0..7; 
    # $addr_str =~ s/0000//g; # to reduce when zero-block appears
    

    【讨论】:

    • 没有必要为每个四位 nybble 获取一个随机数,在这种情况下双冒号是不正确的,因为它代表 至少一个 全零16 位块
    • 你当然是对的@Borodin。我编辑了我的帖子,以免将任何人与不必要的循环混淆。有趣的是,现在我的代码比你的要快一点。通过对Benchmark 的一些测试。 map 是罪魁祸首?
    • 我不想鼓励你做基准测试;当我们编写 Z80 汇编程序时,抢先式调优是遗留的负担,并且知道如果不进行优化,我们的代码将会太慢。 C21 硬件和编译器技术使我们几乎可以忽略调优。首先,您编写的代码的清晰至关重要:将任何人理解您的代码所需的时间缩短几秒钟就可以节省大量资金,从而轻松购买具有更多内核的更快计算机这将任何优化置于阴影之下。
    • 其次,如果您正在编写一个带有用户界面的实时应用程序,那么您必须在用户注意到显着改进之前让您的代码运行两倍。只有当您必须在处理器、内存和存储的系统裕度内工作时,您才应该考虑进行任何调整,然后您应该使用分析来确定代码中的瓶颈。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-03
    • 1970-01-01
    • 2017-10-02
    • 1970-01-01
    • 2012-05-03
    • 2014-08-25
    • 2011-06-15
    相关资源
    最近更新 更多