Perl 是极好的。Perl的文档非常棒。Perl 的社区也……非常棒。然而,Perl 语言相当的大且复杂。对于渴望一个更简单、内置优雅的面向对象特性的 Perl 使用者来说, Ruby可能适合你。
相似点
Ruby 与 Perl 一样的地方……
- 与 CPAN 相似的包管理系统(尽管叫做 RubyGems)。
- 内置正则,尽情享用吧!
- 内置相当大数量的常用库。
- 括号通常是可选的。
- 字符串基本上一样。
- 与 Perl 类似,有通用字符串分隔和正则表达式引用的语法。看起来像
%q{这样}
(单引号)、%Q{这样}
(双引号)和%w{这 是 单 引 号 单 字 列 表}
。如果喜欢,你也%Q|可以|
%Q(这样)
%Q^使用^
。 - 大括号变量插值,尽管它
"看起来#{like}这样"
(你可以将任何 Ruby 代码放进#{}
中)。 - 使用反引号调用 shell 命令。
- 拥有嵌入式文档工具(Ruby 的工具叫 rdoc)。
相异点
Ruby 与 Perl 不同的地方……
- 没有像 Perl 一样的上下文依赖规则。
- 变量和它引用的对象不一样。取而代之的是,变量只是指向对象的引用。
- 尽管
$
和@
有时会作为变量的首字母,它们用来标明作用域($
代表全局,@
用于实例变量,@@
用于类属性),而不是标明类型。 - 列表字面量在方括号内,而不是圆括号内。
- 列表组合不会将他们展开为一个大的列表,而是得到一个列表的列表。
def
代替sub
。- 每行结尾不需要分号。值得一提的是函数、类和分支定义以关键字
end
结尾。 - 对象是强类型。类型间转换时需要手动调用
foo.to_i
、foo.to_s
等。 - 没有
eq
、ne
、lt
、gt
、ge
、 也没有le
。 - 没有钻石操作符(
<>
),通常需要使用IO.some_method
代替。 - 胖箭头
=>
用于哈希字面量。 - 没有
undef
。Ruby 中有nil
。nil
是一个对象(与 Ruby 其他东西一样)。和未定义的变量也不一样。作为布尔值时,它是假值。 - 判断真值时,只有
false
和nil
当做假值。其余一切皆为真(包括0
、0.0
、""
和[]
)。 - 没有 PerlMonks。 但是 ruby-talk 邮件列表是一个能获取到帮助的地方。