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 郵件論壇是個非常有幫助的地方。