庄周梦蝶

生活、程序、未来
   :: 首页 ::  ::  :: 聚合  :: 管理

一段小程序(Perl vs. Ruby)

Posted on 2007-12-07 16:30 dennis 阅读(2206) 评论(1)  编辑  收藏 所属分类: 动态语言
    读《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


评论

# re: 一段小程序(Perl vs. Ruby)  回复  更多评论   

2007-12-08 01:44 by 隔叶黄莺
I prefer Perl to Ruby.

只有注册用户登录后才能发表评论。


网站导航: