从 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_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 邮件列表是一个非常有用的地方。