Perlはすばらしい言語です。Perlのドキュメントもすばらしく、またコミュニティもすばらしいものです。 しかし、言語はとても巨大で、議論の余地はあるにしても少々複雑な感があります。 よりシンプルなものを求める方にはRubyが向いているかもしれません。

類似点

Perl同様、Rubyも次のような特徴を持っています。

  • CPANのようなパッケージ管理システム(RubyGems) があります。
  • 正規表現が言語に組み込まれています。
  • 十分に多くのよく使う組み込み機能があります。
  • 括弧はしばしば省略可能です。
  • 文字列は同じように振る舞います。
  • 文字列や正規表現のクォートをPerlと同じように(%q{こんなシングルクォート}%Q{こんなダブルクォート}%w{こんな シングルクォートの 単語の リスト} のように)行うことができます。
  • ダブルクォートの文字列の中に、"あなたの名前は#{name}"のように、 変数の値を埋め込むことができます。
  • `backticks`のような書式で、シェルコマンドの実行結果を得ることができます。
  • ドキュメントをコードに埋め込むツール(rdoc)があります。

相違点

Perlと異なり、Rubyは次のような特徴を持っています。

  • Perlのようなコンテキスト依存のルールはありません。
  • you don't have the context-dependent rules like with Perl.
  • 変数は、それが指すオブジェクトとは独立したものです。変数は常にオブジェクトへのたんなる参照です。
  • 変数の頭に$@を付けることがありますが、それらは型を指定するものではなく、スコープ($はグローバル変数・@はインスタンス変数・@@はクラス変数)を指定するものです。
  • 配列リテラルには括弧の代りにブラケットを使います。
  • 複数のリストからリストを生成した場合、一つの大きなリストに展開されるのではなく、配列の配列が生成されます。
  • subの代りにdefを使います。
  • 行の終わりにセミコロンは必要ありません。また、関数定義やクラス定義やcase文の終わりにendという予約語を使います。
  • オブジェクトは強く型付けられています。明示的に、foo.to_ifoo.to_sといったように型変換を行う必要があります。
  • eqneltgtgeleといった演算子はありません。
  • ダイアモンド演算子はありません。たいていはIOのメソッドを代りに使います。
  • =>はハッシュリテラルにのみ使います。
  • Perlのundefはありません。Rubyではnilを使います。nilは特殊なオブジェクトで、未定義の変数とは違った意味を持ちます。nilは真偽値を要求する文脈では偽と評価されます。
  • 真偽の判定では、falsenilのみが偽となり、それ以外 のすべての値(00.0"0"を含む)は真となります。
  • PerlMonksはありません。しかし、ruby-talt ML(日本語の場合はruby-list ML)はとても有用な場です。wikifaqもあります。