Perl 很贊,Perl 的文件也很贊,Perl 的社群就是…很贊。但是,這程式語言也相當龐大甚至可說是複雜。對那些渴望擁有一個純真、更多直覺,天生就內建物件導向特性語言的駱駝客來說,Ruby 也許就是為你設計的。
相似點
如同 Perl 一般,在 Ruby 中,
- 你已經擁有一套套件管理系統,有點像是 CPAN(雖然它叫做 RubyGems)。
- 正規表示式直接內建,胃口夠大吧!
- 有相當多常用的一般性內建套件。
- 括號總是可省略的。
- 字串操作方式基本上是一樣的。
- 有一種以常見分隔符號表示的字串,和一種類似 Perl 般以正規表示式語法表示的字串(看起來像是
%q{這種(單引號)表示法}
,或%Q{這種(雙引號)表示法}
,以及%w{這種 表示 一組 單引號 字串 的 陣列}
。如果你喜歡的話,你也%Q|能|
%Q(用)
%Q^其他種類^
的分隔符號)。 - 你會有雙引號表示法可以做字串內的變數取代,雖然它
"看起來#{like}這樣"
(而且能放任何你喜歡的 Ruby 語法在這裡面#{}
)。 - 命令列指令的展開執行使用
`反引號`
。 - 也有內嵌的文件工具(Ruby 的叫做 rdoc)。
相異點
不同於 Perl 的是,在 Ruby 中,
- 你沒有與 Perl 一樣的上下文依賴(context-dependent)規則。
- 一個變數並不等同於一個它所代表的物件。而只是一個物件的參考。
- 雖然
$
和@
有可以當做變數名稱的第一個字符,但不是指變數的類型,而是表示變數的作用域(scope)($
代表全域變數,@
代表實例變數,@@
則是類別變數)。 - 陣列符號使用的是中括號([])而不是小括號(())。
- 在其他列表中建立列表(list)並不會使它們變成一份大列表,相反地你得到的是陣列中的陣列。
- 應該使用
def
而不是sub
來表示函式。 - 並沒有在每行結尾加上分號的需求。值得一提的是,你需要用
end
這種關鍵字來結束函式的定義、類別定義和 case 條件式。 - 物件是強型別。如果你需要轉換成不同型別,你將需要手動調用
foo.to_i
、foo.to_s
等等。 - 沒有
eq
、ne
、lt
、gt
、ge
或le
這種寫法。 - 沒有鑽石型操作符(
<>
)。你反而較常使用IO.some_method
。 - 胖逗號(
=>
)只用來做為雜湊符號。 - 沒有
undef
的寫法,在 Ruby 中你必須寫nil
。nil
是個物件(在 Ruby 中所有東西都是物件),它比較不像是個未定義的變數。如果你把它拿來當做布林值(boolean)使用,它會被評估為false
。 - 當測試真值(true)時,只有
false
和nil
會被評估為假值(false),其他任何值都會被當做真值(包括0
、0.0
和"0"
)。 - 這裡沒有 PerlMonks 。但 ruby-talk 郵件論壇是個非常有幫助的地方。