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_iやfoo.to_sといったように型変換を行う必要があります。 eq、ne、lt、gt、ge、leといった演算子はありません。- ダイアモンド演算子はありません。たいていはIOのメソッドを代りに使います。
- =>はハッシュリテラルにのみ使います。
- Perlの
undefはありません。Rubyではnilを使います。nilは特殊なオブジェクトで、未定義の変数とは違った意味を持ちます。nilは真偽値を要求する文脈では偽と評価されます。 - 真偽の判定では、
falseとnilのみが偽となり、それ以外 のすべての値(0や0.0や"0"を含む)は真となります。 - PerlMonksはありません。しかし、ruby-talt ML(日本語の場合はruby-list ML)はとても有用な場です。wikiやfaqもあります。
Posted by Shugo Maeda on 15 Jun 2006
