私は8つの文字のいくつかのランダムな文字列を生成するperlの1つのライナーを見た:次のperlの1つのライナーで中括弧が必要なのはなぜですか?
perl -le 'print map { ("a".."z")[rand 26] } 1..5'
をしかし、これはマップの{}
ないと動作しません。何故ですか?
私は8つの文字のいくつかのランダムな文字列を生成するperlの1つのライナーを見た:次のperlの1つのライナーで中括弧が必要なのはなぜですか?
perl -le 'print map { ("a".."z")[rand 26] } 1..5'
をしかし、これはマップの{}
ないと動作しません。何故ですか?
perldoc -f map
を参照。 map
は、map({block} @array)
とmap(expression, @array)
の2つの形式を持っています。後者の形態はこれと同じように使用することができる。
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
の唯一の引数は無効です。これは、余分な括弧のセットまたは単体の+
で明確にすることができます。
ありがとう!意味をなさない –
どのように単項+はそこに助けましたか?私は提供されたdocリンクの例で言及しているが、それがどのように働いているかはわかりません。私はGoogleができる関数呼び出しで括弧を避けるための共通のものですか? –
@PalaceChanこれは、 'map'を最初の'( ')から分離するために使われます。このトリックは、複数の引数を取る一般的なPerlの使用関数です - 他には' grep'と 'print'が含まれています。 – ephemient
正常に動作しなかったコードはどうでしたか?それは '{}'なしで行うことができます。 – aschepler
@aschepler:はい、中括弧を削除した場合は、ブロックとリストの間にカンマを追加する必要があります。 –