Perl 很棒。Perl 的文档很棒。Perl 社区……也很棒。对于那些渴望从一开始就拥有优雅的内置 OO 特性的 Perl 程序员来说,Ruby 可能适合你。
相似之处
与 Perl 一样,在 Ruby 中,…
- 你有一个包管理系统,有点像 CPAN(不过它被称为 RubyGems)。
- 正则表达式是内置的。尽情享用吧!
- 有相当数量的常用内置函数。
- 括号通常是可选的。
- 字符串的工作原理基本相同。
- 有一个类似于 Perl 的通用分隔字符串和正则表达式引用语法。它看起来像
%q{this}
(单引号),或%Q{this}
(双引号),以及%w{this for a single-quoted list of words}
。你可以%Q|can|
%Q(use)
%Q^other^
使用其他分隔符,如果你喜欢。 - 你拥有双引号式变量插值,虽然它
"looks #{like} this"
(你可以在#{}
中放入任何你喜欢的 Ruby 代码)。 - Shell 命令扩展使用
`backticks`
。 - 你拥有嵌入式文档工具(Ruby 的称为 rdoc)。
不同之处
与 Perl 不同,在 Ruby 中,…
- 你没有像 Perl 那样依赖于上下文的规则。
- 变量与它所引用的对象并不相同。相反,它始终只是一个对对象的引用。
- 虽然
$
和@
有时用作变量名的第一个字符,但它们并不表示类型,而是表示作用域($
用于全局变量,@
用于对象实例,@@
用于类属性)。 - 数组字面量放在方括号中,而不是圆括号中。
- 组合其他列表的列表不会将它们扁平化为一个大列表。相反,你将得到一个包含数组的数组。
- 它是
def
而不是sub
。 - 每行末尾不需要分号。顺便说一句,你用
end
关键字结束函数定义、类定义和 case 语句。 - 对象是强类型的。如果你需要在类型之间转换,你需要手动调用
foo.to_i
、foo.to_s
等。 - 没有
eq
、ne
、lt
、gt
、ge
也不le
。 - 没有菱形运算符 (
<>
)。你通常使用IO.some_method
代替。 - 胖逗号
=>
仅用于哈希字面量。 - 没有
undef
。在 Ruby 中,你拥有nil
。nil
是一个对象(就像 Ruby 中的任何其他东西一样)。它与未定义的变量不同。如果你将其视为布尔值,它将评估为false
。 - 当测试真值时,只有
false
和nil
评估为假值。其他所有内容都是真值(包括0
、0.0
和"0"
)。 - 没有 PerlMonks。虽然 ruby-talk 邮件列表是一个非常有帮助的地方。