2017-09-24 9 views
3

私は、文字列中の母音の数を数えるperlプログラムに出くわしました。しかし、私はそれがどのように働いているのかを1つのラインで推論することはできません。このプログラムを1行ずつデコードできる人は誰ですか?

$\=$/;map{ 
    $_=<>;print 0+s/[aeiou]//gi 
}1..<> 
+0

これは 'map'の悪用であり、普通の' for'ループで行うべきです: 'print <> =〜tr/aeiouAEIOU //、" \ n "for 1 .. <>'。それがわかりやすいかどうかわかりません。 – Borodin

答えて

9

$\=$/;はperlで何を意味するのでしょうか?

設定$/の値に$\

$/は、readline<>)の行末を定義します。デフォルトは改行(U + 000A)です。

$\がそれぞれprintの出力に追加されます。デフォルトは空文字列です。

ので、$/が変更されていなかったと仮定すると、それはsayようprint行為を行い改行に$\を設定します。

このプログラムを1行ずつデコードできる人は誰ですか?

  1. グローバルsayようprint行為を行います。
  2. ARGVから行を読み取ります。数のリードに等しい回数だけ
    1. ARGVからのラインを読みます。
    2. s/[aeiou]//giを使用して母音の数を数えます。
    3. 結果を印刷します。スカラーコンテキストで

は、s///gマッチ/交換の数を返します。 0+は、スカラーコンテキストを強制します。ところで


tr/aeiouAEIOU//0+s/[aeiou]//giよりも速く、そしてもはやないだろう。それはまた非破壊的です。

+1

ありがとうございました。もう一つ、地図の最後に '' .. <> 'が何を意味するのでしょうか? –

+1

ARGVから行を読み込みます。 1から読み取った数字までの数字のリストを作成します。 – ikegami

関連する問題