从 Perl 到 Ruby

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