从 Perl 到 Ruby

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_ifoo.to_s 等。
  • 没有 eqneltgtge 也不 le
  • 没有菱形运算符 (<>)。你通常使用 IO.some_method 代替。
  • 胖逗号 => 仅用于哈希字面量。
  • 没有 undef。在 Ruby 中,你拥有 nilnil 是一个对象(就像 Ruby 中的任何其他东西一样)。它与未定义的变量不同。如果你将其视为布尔值,它将评估为 false
  • 当测试真值时,只有 falsenil 评估为假值。其他所有内容都是真值(包括 00.0"0")。
  • 没有 PerlMonks。虽然 ruby-talk 邮件列表是一个非常有帮助的地方。