6

8 文字のランダムな文字列を生成する perl one liner を見ました。

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

{}ただし、これはfor マップがないと機能しません。何故ですか?

4

1 に答える 1

11

を参照してくださいperldoc -f mapmapと の 2 つの形式が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ます。これは、余分な括弧のセットまたは unary を使用して明確にすることができます+

于 2012-09-01T04:02:36.383 に答える