从 Perl 迁移到 Ruby

Perl 很棒。Perl 的文档也很棒。Perl 社区……也很棒。对于那些渴望从一开始就内建优雅面向对象特性的 Perler 来说,Ruby 也许是你的菜。

相似之处

与 Perl 一样,在 Ruby 中,...

  • 你有一个包管理系统,有点像 CPAN(尽管它叫做 RubyGems)。
  • 正则表达式是内置的。请享用!
  • 有很多常用的内置功能。
  • 括号通常是可选的。
  • 字符串的基本工作方式相同。
  • 有一个通用的分隔字符串和正则表达式引用语法,类似于 Perl。它看起来像 %q{this}(单引号),或 %Q{this}(双引号),以及 %w{this for a single-quoted list of words}。如果你愿意,你可以 %Q|使用| %Q(其他) %Q^分隔符^
  • 你有双引号风格的变量插值,虽然它 "看起来是这样的 #{like} this"(并且你可以将你喜欢的任何 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 邮件列表是一个非常有用的地方。