这个perl地图调用是做什么的?

时间:2014-05-27 21:58:14

标签: perl

join "", map { ( (0 .. 9, "a" .. "f")[rand(16)])} 1 .. 24;

我理解map和join函数是如何工作的,但是我的错误是{}。它是一个包含16个元素的数组,rand()给出了一个引用它的数字。我知道map1 .. 24中的数字映射到什么地方?从引用数组返回的数字?

2 个答案:

答案 0 :(得分:2)

(list)[i]只返回列表的第i个成员。因此,您遍历列表1 .. 24,通过从16个字符列表中选择一个随机成员来将随机字符映射到它。

您可以从

获得类似的输出
for (1.. 24) {
    print ( (0 .. 9, "a" .. "f")[rand 16] );
}

答案 1 :(得分:2)

您的代码只构造一个随机的24位十六进制数字。

范围1..24只是一个一次性迭代器,用于定义多少位数。 map中的代码只选择十六进制数字静态数组的随机元素。

如果我们删除一些无关的间距和括号,我认为代码更容易阅读,但是使用sprintf也可以获得相同的结果。以下代码在功能上是相同的:

print join("", map { (0..9, "a".."f")[rand 16] } 1..24), "\n";
print join("", map { sprintf "%x", int rand 16 } 1..24), "\n";