为什么我需要在下面的perl衬里中使用牙套?

时间:2012-09-01 03:33:22

标签: perl

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

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

但如果没有{}地图,这不起作用。那是为什么?

1 个答案:

答案 0 :(得分: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的唯一参数,这是无效的。{1}}。这可以通过一组额外的括号或一元+来消除歧义。