Perl 很棒。Perl 的文档很棒。Perl 社区……也很棒。对于那些渴望从一开始就内置优雅面向对象特性的 Perl 程序员来说,Ruby 可能会适合你。
相似之处
与 Perl 一样,在 Ruby 中,…
- 你有一个包管理系统,有点像 CPAN (尽管它被称为 RubyGems)。
- 正则表达式是内置的。尽情享用吧!
- 有相当多的常用内置函数。
- 括号通常是可选的。
- 字符串的工作方式基本相同。
- 有一种通用的定界字符串和正则表达式引用语法,类似于 Perl 的。它看起来像
%q{这个}(单引号),或者%Q{这个}(双引号),以及%w{这个 用于单引号的单词列表}。你可以根据喜好%Q|使用|%Q(其他)%Q^分隔符^。 - 你有双引号式的变量插值,尽管它
"看起来#{像}这样"(你可以把任何 Ruby 代码放在#{}里面)。 - Shell 命令扩展使用
`反引号`。 - 你有嵌入式文档工具 (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 邮件列表是一个非常有用的地方。