我遇到了一个perl程序,它计算字符串中元音的数量。但是我无法推断它是如何运作的。谁可以逐行解码这个程序?
$\=$/;map{
$_=<>;print 0+s/[aeiou]//gi
}1..<>
答案 0 :(得分:9)
$\=$/;
在perl中的含义是什么?
将$\
设置为$/
的值。
$/
定义readline
(<>
)的行尾结尾。它的默认值是换行符(U + 000A)。
$\
附加到每个print
的输出中。它的默认值是空字符串。
因此,假设$/
未更改,则会将$\
设置为换行符,这会使print
的行为与say
类似。
任何可以逐行解码此程序的人吗?
print
行为say
。ARGV
读取一行。ARGV
读取一行。s/[aeiou]//gi
计算元音数量。在标量上下文中,s///g
返回匹配/替换的数量。 0+
强制标量上下文。
顺便说一下,tr/aeiouAEIOU//
会比0+s/[aeiou]//gi
更快,而不再是\(.\)
。它也是非破坏性的。