私は、文字列中の母音の数を数えるperlプログラムに出くわしました。しかし、私はそれがどのように働いているのかを1つのラインで推論することはできません。このプログラムを1行ずつデコードできる人は誰ですか?
$\=$/;map{
$_=<>;print 0+s/[aeiou]//gi
}1..<>
私は、文字列中の母音の数を数えるperlプログラムに出くわしました。しかし、私はそれがどのように働いているのかを1つのラインで推論することはできません。このプログラムを1行ずつデコードできる人は誰ですか?
$\=$/;map{
$_=<>;print 0+s/[aeiou]//gi
}1..<>
$\=$/;
はperlで何を意味するのでしょうか?
設定$/
の値に$\
。
$/
は、readline
(<>
)の行末を定義します。デフォルトは改行(U + 000A)です。
$\
がそれぞれprint
の出力に追加されます。デフォルトは空文字列です。
ので、$/
が変更されていなかったと仮定すると、それはsay
ようprint
行為を行い改行に$\
を設定します。
このプログラムを1行ずつデコードできる人は誰ですか?
say
ようprint
行為を行います。ARGV
から行を読み取ります。数のリードに等しい回数だけARGV
からのラインを読みます。s/[aeiou]//gi
を使用して母音の数を数えます。は、s///g
マッチ/交換の数を返します。 0+
は、スカラーコンテキストを強制します。ところで
tr/aeiouAEIOU//
は
0+s/[aeiou]//gi
よりも速く、そしてもはやないだろう。それはまた非破壊的です。
ありがとうございました。もう一つ、地図の最後に '' .. <> 'が何を意味するのでしょうか? –
ARGVから行を読み込みます。 1から読み取った数字までの数字のリストを作成します。 – ikegami
これは 'map'の悪用であり、普通の' for'ループで行うべきです: 'print <> =〜tr/aeiouAEIOU //、" \ n "for 1 .. <>'。それがわかりやすいかどうかわかりません。 – Borodin