Perl memang memukau. Dokumentasi Perl juga memukau. Komunitas Perl juga … luar biasa. Untuk para pengguna Perl yang sudah lama menginginkan bahasa beorientasi objek yang terintegrasi elegan dari awal, Ruby cocok untuk Anda.
99 Bottles of Beer on the Wall
Cara tercepat untuk melihat perbedaan Perl dan Ruby adalah melihat contoh source code.
Berikut ini adalah kode program 99 Bottles of Beer on the Wall menggunakan bahasa Perl:
Program tersebut dapat ditulis sebagai berikut di Ruby:
Algoritma yang digunakan kedua program tersebut sedikit berbeda, tapi secara fungsionalitas sama.
Sumber: Perl (ditulis oleh Jim Menard), Ruby (ditulis oleh binary42)
Kemiripan Perl dan Ruby
Sama seperti Perl, di Ruby…
- Anda mendapat package management system, kurang lebih seperti CPAN, yang di Ruby disebut RubyGems.
- Regexp (regular expressions) sudah built in. Selamat menikmati!
- Cukup banyak library standar bawaan Ruby yang siap pakai.
- Buka dan tutup kurung secara umum opsional (boleh dipakai boleh juga tidak)
- Cara penggunaan
String
secara umum mirip dengan Perl. - Sintaks delimited string dan regexp mirip dengan Perl (seperti
%q{ini string}
(single-quoted), atau%Q{ini juga string}
(double-quoted), dan%w{ini untuk list kata-kata yang single-quoted}
. Anda%Q|bisa|
%Q~saja~
%Q(menggunakan)
delimiter%Q^yang lain^
kalau Anda suka). - Menyediakan interpolasi string dalam petik ganda,
"bentuknya #{seperti} ini"
(contoh sebelumnya menghasilkan isi variabelseperti
, tapi Anda bisa menaruh kode Ruby apa pun di dalam sintaks#{}
). - Shell command juga menggunakan
`backtick`
(tanda petik balik). - Mempunyai fitur dokumentasi dalam kode, yang di Ruby disebut
rdoc
.
Perbedaan Perl dan Ruby
Tidak seperti Perl, di Ruby…
- Anda tidak punya context-dependent rules seperti di Perl.
- Sebuah variabel tidak sama dengan obyek yang dituju, karena variabel hanya reference dari obyek sebenarnya.
- Karakter
$
and@
dapat digunakan untuk prefiks variabel, tapi penggunaannya berbeda. Karakter tersebut digunakan untuk menyatakan lingkup variabel ($
untuk variabel global,@
untuk instance variable, dan@@
untuk atribut kelas). - Anda membangun Array menggunakan kurung siku (misal: @[1, 2, 3]) dan bukan tanda kurung.
- Menyimpan array dalam array lainnya tidak menggabungkan array tersebut menjadi satu tingkat, melainkan Anda mendapatkan array di dalam array (nested array).
- Menggunakan
def
untuk mendefinisikan metode, bukansub
. - Tidak perlu semicolon / titik koma (
;
) di setiap akhir baris. Sedangkan definisi function, definisi class, statemencase
, dan lain-lain ditutup dengan keywordend
. - Obyek bersifat strongly typed. Jika Anda ingin mengkonversi type,
Anda tinggal memanggil metode yang diinginkan, misalnya
foo.to_i
,foo.to_s
, dan seterusnya. - Tidak ada
eq
,ne
,lt
,gt
,ge
ataupunle
. Gunakan operator yang sudah baku, misalnya<
,>=
, dan sebagainya. - Tidak ada diamond operator (
<>
). Anda biasanya dapatIO.some_method
sebagai gantinya. - Fat comma (
=>
) hanya digunakan untuk membuat hash. - Tidak ada
undef
. Di Ruby Anda dapat menggunakannil
.nil
merupakan obyek (seperti obyek yang lain juga di Ruby). Meskinil
tidak sama dengan variabel yang belum didefinisikan,nil
dianggapfalse
pada operasi boolean, sehingga dapat digunakan sebagai pengganti apabila dibutuhkan. - Ketika dites, hanya
false
dannil
yang bernilaifalse
. Selain kedua nilai tadi, semuanya nilai boolean ekspresi apapun adalahtrue
(termasuk0
,0.0
dan"0"
). - Jika Anda menyukai PerlMonks, milis id-ruby dan ruby-talk adalah tempat yang sangat berguna.