8 文字のランダムな文字列を生成する perl one liner を見ました。
perl -le 'print map { ("a".."z")[rand 26] } 1..5'
{}ただし、これはfor マップがないと機能しません。何故ですか?
8 文字のランダムな文字列を生成する perl one liner を見ました。
perl -le 'print map { ("a".."z")[rand 26] } 1..5'
{}ただし、これはfor マップがないと機能しません。何故ですか?
を参照してくださいperldoc -f map。 mapと の 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 を使用して明確にすることができます+。