6

我看到了一个 perl one liner 来生成一些 8 个字符的随机字符串:

perl -le 'print map { ("a".."z")[rand 26] } 1..5'

{}但如果没有for 地图,这是行不通的。这是为什么?

4

1 回答 1

11

perldoc -f mapmap有两种形式:map({block} @array)map(expression, @array)。后一种形式可以像这样使用:

perl -le 'print map(("a".."z")[rand 26], 1..5)'
perl -le 'print map +("a".."z")[rand 26], 1..5'

原因

perl -le 'print map ("a".."z")[rand 26], 1..5'

不起作用是因为它解析为

perl -le 'print(((map("a".."z"))[rand(26)]), 1..5)'

换句话说,"a".."z"成为 的唯一参数map,这是无效的。这可以通过一组额外的括号或一元来消除歧义+

于 2012-09-01T04:02:36.383 回答