读《Perl语言入门》(第四版,我买的书,网上有个翻译质量很高的电子版)的第10章的习题,人见人爱的猜数游戏,用perl写出来大概这样:
$num
=
int
(
1
+
rand
100
);
print
"
I have a number,guess it?:\n
"
;
while
(
<>
) {
chomp
;
next
unless
/\
d
+/
;
$_
>
$num
?
print
"
Too high\n
"
:
$_
==
$num
?
last
:
print
"
Too low\n
"
; }
题外话:玩Perl的高人们别鄙视我,我是perl新手啊,如果写的不够“perl”,多多指点。
这段代码转成ruby,可以这样写:
$num
=1+
(rand
100
) puts
"
I have a number guess it?
"
while
(true) gets.chomp next unless
~/
\d
+/
$_.to_i
>
$num?begin
print
"
Too high\n
"
end: $_.to_i
==
$num? begin
break
end:begin
print
"
Too low\n
"
end end
看出来了吧,两者何其相似啊,包括perl里面人见人爱的$_,ruby也是支持的,唯一那么一点不同的地方就是last换成了break,然后是正则表达式左边多了个~,你完全可以将这个符号去掉,不过会有警告,最后就是Ruby中的要执行的表达式得放在begin...end里面,这一点让我琢磨了一段时间,还以为Ruby不支持呢。读《Perl语言入门》最大的乐趣除了妙趣横生的语言、古灵精怪的符号之外,就是寻找Ruby中的Perl痕迹,哦哦,那个味道相当重——骆驼的味道。不过现在Ruby不鼓励这样的写法,毕竟,程序是给人读的,因此可以改写一下:
$num
=1+
(rand 100)
puts
"
I have a number guess it?
"
while
(true) guess
=
STDIN.gets next unless guess
=~/
\d
+/
if
(guess.to_i
>
$num) puts
"
Too high
"
elsif(guess.to_i
==
$num)
break
else
puts
"
Too low
"
end end
文章转自庄周梦蝶 ,原文发布时间2007-12-07