我看到一个perl one liner生成一些8个字符的随机字符串:
perl -le 'print map { ("a".."z")[rand 26] } 1..5'
但是如果没有{}for map,这不起作用.这是为什么?
eph*_*ent 11
见perldoc -f map. map有两种形式: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'
Run Code Online (Sandbox Code Playgroud)
原因
perl -le 'print map ("a".."z")[rand 26], 1..5'
Run Code Online (Sandbox Code Playgroud)
不起作用是因为它解析像
perl -le 'print(((map("a".."z"))[rand(26)]), 1..5)'
Run Code Online (Sandbox Code Playgroud)
换句话说,"a".."z"成为唯一的参数map,这是无效的.这可以通过一组额外的括号或一元来消除歧义+.
| 归档时间: |
|
| 查看次数: |
258 次 |
| 最近记录: |