免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 6103 | 回复: 16
打印 上一主题 下一主题

[讨论] Perl 和 Ruby 的不同 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-04-10 16:23 |只看该作者 |倒序浏览
以下内容摘自 Ruby 官方主页的繁体中文版本,作了简单的处理,有不通顺的地方,请参看英文:

http://www.ruby-lang.org/en/docu ... /to-ruby-from-perl/

大家可以发表自己的看法。

从 Perl 到 Ruby
Perl 很赞,Perl 的文件也很赞,Perl 的社群就是...很赞。但是,这程式语言也相当庞大甚至可说是复杂。对那些渴望拥有一个纯真、更多直觉,天生就内建变量导向特性语言的骆驼客来说,Ruby 也许就是为你设计的。

相似点

如同 Perl 一般,在 Ruby 中,

你已经拥有一套套件管理系统,有点像是 CPAN(虽然它叫做 RubyGems)。
正则表达式直接内建,胃口够大吧!
有相当多常用的一般性内建套件。
括号总是可省略的。
字串操作方式基本上是一样的。
有一种以常见分隔符号表示的字串,和一种类似 Perl 般以正则表达式语法表示的字串(看起来像是 %q{这种(单引号)表示法},或 %Q{这种(双引号)表示法},以及 %w{这种 表示 一组 单引号 字串 的 阵列}。如果你喜欢的话,你也 %Q|能| %Q(用) %Q^其他种类^ 的分隔符号)。
你会有双引号表示法可以做字串内的变量取代,虽然它 "看起来#{like}这样"(而且能放任何你喜欢的 Ruby 语法在这里面 #{})。
命令列指令的展开执行使用 `反引号`。
也有内嵌的文件工具(Ruby 的叫做 rdoc)。
相异点

不同于 Perl 的是,在 Ruby 中,

你没有与 Perl 一样的上下文依赖(context-dependent)规则。
一个变量并不等同于一个它所代表的变量。而只是一个变量的参考。
虽然 $ 和 @ 有可以当做变量名称的第一个字符,但不是指变量的类型,而是表示变量的作用域(scope)($ 代表全域变量,@ 代表实例变量,@@ 则是类别变量)。
阵列符号使用的是中括号([])而不是小括号(())。
在其他列表中建立列表(list)并不会使它们变成一份大列表,相反地你得到的是阵列中的阵列。
应该使用 def 而不是 sub 来表示函式。
并没有在每行结尾加上分号的需求。值得一提的是,你需要用 end 这种关键字来结束函式的定义、类别定义和 case 条件式。
变量是强类型。如果你需要转换成不同类型,你将需要手动调用 foo.to_i、foo.to_s 等等。
没有 eq、ne、lt、gt、ge 或 le 这种写法。
没有钻石型操作符(<>)。你反而较常使用 IO.some_func。
胖逗号(=>)只用来做为散列键值对连接符号。
没有 undef 的写法,在 Ruby 中你必须写 nil。nil 是个变量(在 Ruby 中所有东西都是变量),它比较不像是个未定义的变量。如果你把它拿来当做布尔值(boolean)使用,它会被评估为 false。
当测试真值(true)时,只有 false 和 nil 会被评估为假值(false),其他任何值都会被当做真值(包括 0、0.0 和 "0")。
这里没有 PerlMonks 。但 ruby-talk 邮件论坛是个非常有帮助的地方。

论坛徽章:
0
2 [报告]
发表于 2013-04-10 22:42 |只看该作者
这个对比太表面了。最主要区别在于OO吧。另外ruby借鉴了函数式编程的一些思想。

论坛徽章:
7
戌狗
日期:2013-12-15 20:43:38技术图书徽章
日期:2014-03-05 01:33:12技术图书徽章
日期:2014-03-15 20:31:17未羊
日期:2014-03-25 23:48:20丑牛
日期:2014-04-07 22:37:44巳蛇
日期:2014-04-11 21:58:0915-16赛季CBA联赛之青岛
日期:2016-03-17 20:36:13
3 [报告]
发表于 2013-04-11 07:55 |只看该作者
很赞。

论坛徽章:
0
4 [报告]
发表于 2013-04-11 08:15 |只看该作者
Ruby 的语言架构在 OO 之上。确实是 Perl 没有的。

Ruby 虽然设计精致,但几个地方发现很变扭:

1. 代码块,用 |var| 的语法设置代码块变量,但却不知道和迭代器内置的变量是否冲突,就小心的用单字符变量来设置。这就是语言设计的问题。应当将代码块内的变量和迭代器内的变量采用一种隔离机制。

2. 模块和类的区别,类有模块的功能,但还是加上了模块,只为实现多重继承。应当在类中添加关键字来实现。

3. 针对类设计的实例变量和类变量等标识符的写法,不能扩展到普通方法中进行使用。使语言的一致性降低。

论坛徽章:
7
戌狗
日期:2013-12-15 20:43:38技术图书徽章
日期:2014-03-05 01:33:12技术图书徽章
日期:2014-03-15 20:31:17未羊
日期:2014-03-25 23:48:20丑牛
日期:2014-04-07 22:37:44巳蛇
日期:2014-04-11 21:58:0915-16赛季CBA联赛之青岛
日期:2016-03-17 20:36:13
5 [报告]
发表于 2013-04-11 08:18 |只看该作者
确实是。

论坛徽章:
46
15-16赛季CBA联赛之四川
日期:2018-03-27 11:59:132015年亚洲杯之沙特阿拉伯
日期:2015-04-11 17:31:45天蝎座
日期:2015-03-25 16:56:49双鱼座
日期:2015-03-25 16:56:30摩羯座
日期:2015-03-25 16:56:09巳蛇
日期:2015-03-25 16:55:30卯兔
日期:2015-03-25 16:54:29子鼠
日期:2015-03-25 16:53:59申猴
日期:2015-03-25 16:53:29寅虎
日期:2015-03-25 16:52:29羊年新春福章
日期:2015-03-25 16:51:212015亚冠之布里斯班狮吼
日期:2015-07-13 10:44:56
6 [报告]
发表于 2013-04-11 09:06 |只看该作者
肯定是OO啊,Ruby 利用自己纯OO和默认 self 玩出各花样,相较之下 Perl 的 $_  也没那么炫了

论坛徽章:
27
水瓶座
日期:2014-08-22 21:06:34程序设计版块每日发帖之星
日期:2015-11-25 06:20:0015-16赛季CBA联赛之新疆
日期:2015-12-19 19:05:48IT运维版块每日发帖之星
日期:2015-12-25 06:20:31IT运维版块每日发帖之星
日期:2015-12-25 06:20:31IT运维版块每日发帖之星
日期:2015-12-25 06:20:3315-16赛季CBA联赛之上海
日期:2016-04-15 19:51:31程序设计版块每日发帖之星
日期:2016-04-17 06:23:29程序设计版块每日发帖之星
日期:2016-04-23 06:20:00程序设计版块每日发帖之星
日期:2016-05-26 06:20:00每日论坛发贴之星
日期:2016-05-26 06:20:0015-16赛季CBA联赛之辽宁
日期:2017-02-16 23:59:47
7 [报告]
发表于 2013-04-11 09:30 |只看该作者
我比较看重它们之间库的没有重叠的地方,有的cpan没有,在gem里可以找到。

论坛徽章:
27
水瓶座
日期:2014-08-22 21:06:34程序设计版块每日发帖之星
日期:2015-11-25 06:20:0015-16赛季CBA联赛之新疆
日期:2015-12-19 19:05:48IT运维版块每日发帖之星
日期:2015-12-25 06:20:31IT运维版块每日发帖之星
日期:2015-12-25 06:20:31IT运维版块每日发帖之星
日期:2015-12-25 06:20:3315-16赛季CBA联赛之上海
日期:2016-04-15 19:51:31程序设计版块每日发帖之星
日期:2016-04-17 06:23:29程序设计版块每日发帖之星
日期:2016-04-23 06:20:00程序设计版块每日发帖之星
日期:2016-05-26 06:20:00每日论坛发贴之星
日期:2016-05-26 06:20:0015-16赛季CBA联赛之辽宁
日期:2017-02-16 23:59:47
8 [报告]
发表于 2013-04-11 09:58 |只看该作者
还想起一个。Perl好像没有内置交互式,你Ruby是有的irb,这个很方便的

论坛徽章:
0
9 [报告]
发表于 2013-04-11 10:07 |只看该作者
回复 8# shijiang1130

Python Haskell 等许多语言都有,这些东西让语言可以用一种更简洁的方式展示自己的功能。我儿子现在非常喜欢 Ruby 的 irb ,每天都用他来考计算机加法。
   
其实 Perl 也有,不过是个人搞的,很简陋。

论坛徽章:
0
10 [报告]
发表于 2013-04-11 11:00 |只看该作者
回复 9# Perlvim


    老哥,你儿子多大了?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP