我看到一个Perl一个衬垫,以生成8个字符的一些随机字符串:为什么我需要在下面的perl one liner中使用大括号?
perl -le 'print map { ("a".."z")[rand 26] } 1..5'
但这并不没有{}
在地图工作。这是为什么?
我看到一个Perl一个衬垫,以生成8个字符的一些随机字符串:为什么我需要在下面的perl one liner中使用大括号?
perl -le 'print map { ("a".."z")[rand 26] } 1..5'
但这并不没有{}
在地图工作。这是为什么?
请参阅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'
原因
perl -le 'print map ("a".."z")[rand 26], 1..5'
不起作用的,因为它解析像
perl -le 'print(((map("a".."z"))[rand(26)]), 1..5)'
换句话说,"a".."z"
成为map
的唯一参数,这是无效的。这可以用一组额外的括号或一个一元+
来消除歧义。
谢谢!说得通。 –
一元+如何帮助那里?我看到它在文档链接提供的示例中提到,但不确定它是如何工作的。我可以谷歌是否避免函数调用中的括号是常见的事情? –
@PalaceChan它是用来将'map'与第一个'(''分开的。这个技巧是常用的Perl使用函数,它需要多个参数 - 其他的包括'grep'和'print'。 – ephemient
究竟是什么代码没有工作?它可以不用'{}'来完成。 – aschepler
@aschepler:是的,但是如果您删除了大括号,那么您需要在该块和列表之间添加逗号。 –