从 Perl 到 Ruby

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_ifoo.to_s 等。
  • 没有 eqneltgtge、 也没有 le
  • 没有钻石操作符(<>),通常需要使用 IO.some_method 代替。
  • 胖箭头 => 用于哈希字面量。
  • 没有 undef。Ruby 中有 nilnil 是一个对象(与 Ruby 其他东西一样)。和未定义的变量也不一样。作为布尔值时,它是假值。
  • 判断真值时,只有 falsenil 当做假值。其余一切皆为真(包括 00.0""[])。
  • 没有 PerlMonks。 但是 ruby-talk 邮件列表是一个能获取到帮助的地方。