一段小程序(Perl vs. Ruby)

    xiaoxiao2023-12-24  28

    读《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
    最新回复(0)