PerlからRubyへ

Perlはすばらしい言語です。ドキュメントもすばらしいし、Perlコミュニティもすばらしいコミュニティです。 しかし、言語はかなり大きく、間違いなく複雑です。 もっとシンプルで直交的な言語や、最初から洗練されたオブジェクト指向の機能が組み込まれた言語を求めているPerl使いにとって、 Rubyは答えになるかもしれません。

Perlとの類似

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コードを置くことができます)。
  • シェルコマンドを実行するには`backticks`のようにします。
  • rdocという組み込みのドキュメントツールがあります。

Perlとの違い

Perlと違って、Rubyは…

  • Perlのようなコンテキスト依存のルールはありません。
  • 変数はオブジェクトそのものではありません。常にオブジェクトへの参照です。
  • 変数名の最初の1文字に$@などが使われることがあります。 これらは型ではなく、スコープを示します ($はグローバル変数、@はインスタンス変数、@@はクラス変数 であることを示します)。
  • 配列リテラルは括弧ではなく角括弧を使います。
  • リストの中にリストを入れると、それはフラットな一つのリスト になるわけでなありません。代わりに配列の配列が得られます。
  • subの代わりにdefを使います。
  • 行の終わりにセミコロンは必要ありません。 関数定義やクラス定義、case文の終わりを示すには、 endキーワードを使います。
  • オブジェクトは強く型付けされています。 他の型に変換するには、foo.to_ifoo.to_sなどの変換メソッドを 呼び出す必要があります。
  • eqneltgtgeleはありません。
  • ダイアモンド演算子(<>)はありません。 IO.some_methodを代わりに使います。
  • =>はハッシュリテラルにだけ使われます。
  • undefはありません。Rubyにはnilがあります。 nilは(Rubyにおける他の値と同様に)オブジェクトで、 未定義の変数とは異なります。 真偽値のように扱った場合、nilfalseと評価されます。
  • 真か偽かの判定では、falsenilのみが偽と評価されます。 それ以外の値(00.0"0"など)はすべて真と評価されます。
  • PerlMonksはありませんが、ruby-listメーリングリストなどの質問場所があります。