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 を使用して明確にすることができます+
。