Tuesday, October 30, 2012

Bahasa Pengaturcaraan Perl

Perl (Practical Extraction and Reporting Language) ialah bahasa pengaturcaraan terjemahan. Bahasa pengaturcaraan amnya ada dua jenis - yang terkompil (misalnya C, Java dll) dan yang diterjemah (Perl, Python dll). Bahasa terkompil dan bahasa terjemahan kedua-duanya melalui proses penterjemahan (bahasa pengaturcaraan kepada bahasa mesin) sebelum boleh dilaksanakan. Bezanya ialah dari segi proses pelaksanaan program.

Semua atur cara bahasa terkompil akan dikompil kepada fail berbentuk program. Maka proses mengkompil hanya perlu berlaku sekali sahaja kerana pengkompil tidak diperlukan untuk melaksanakan program. Manakala bahasa diterjemah akan sentiasa berada dalam bentuk skrip (kod sumber atau bahasa pengaturcaraan). Setiap kali hendak dilaksakanan, ia perlu diterjemah dan dilaksanakan oleh pengkompil (penterjemah). Maka atur cara bahasa terjemahan hanya boleh dilaksanakan dengan kehadiran pengkompil. (Atur cara bahasa terjemahan biasanya dipanggil skrip.)

Perl boleh digunakan bagi tujuan memformat dan memproses data berbentuk teks. Misalnya fail HTML (muka sesawang) boleh diformat semula ke dalam bentuk teks biasa dengan cara mengekstrak kandungan data teksnya dan mencetak semula data tersebut ke dalam fail teks tanpa HTML. Perl juga boleh digunakan bagi memuat turun kandungan pangkalan data dan mencetak laporan, membina laman sesawang (Common Gateway Interface atau CGI), mengurus tadbir pelayan, dan membina antaramuka grafik (GUI) sesebuah aplikasi.

Berikut adalah contoh skrip Perl yang mudah, iaitu untuk mencari dan menyenaraikan kedudukan nama 'Mohd Yunus' yang terkandung dalam sebuah fail teks 'dokumen.txt' ('Mohd' dan 'Yunus' mesti berada dalam baris yang sama):

use strict;

my $kata = 'Mohd Yunus';        # perkataan yang dicari
my $infile = "dokumen.txt";     # nama fail input.

open(INFILE, "<$infile") or
   die("Fail input '$infile' tidak dapat dibaca. $!");
while($_ = <INFILE>) {
    if(/$kata/) {
        print "'$kata' dikesan pada baris $.\n";
    }
}
close INFILE;
Contoh 1

Pengaturcaraan Perl agak sukar bagi pengatur cara yang baru mempelajarinya. Namun jika sudah biasa, Perl sebenarnya mudah digunakan dan ada masanya sangat berguna. Ia juga (i) bahasa yang sangat fleksibel, (ii) cukup mantap untuk melakukan tugas pemprosesan yang kompleks (walaupun Perl bukan pilihan untuk program masa-nyata.), (iii) menjadi pilihan kepada pentadbir sistem dan pembangun aplikasi sesawang, (iv) mendapat sokongan peminat atur cara sumber terbuka (open-source) dan (v) mempunyai sumber pustaka yang besar dan komprehensif (CPAN.org). Namun Perl lebih dikenali kerana mula-mula memperkenalkan operator ekspresi regular (regular expression) dalam bahasa atur cara, sehinggakan notasi standard Perl-compatible regular expression sering dijadikan rujukan oleh pengkompil dan enjin-enjin ekspresi regular yang terkemudian daripadanya.

Bagi yang ingin menggunakan Perl, boleh muat turun penterjemah Perl daripada Perl.org. Penterjemah diperlukan untuk melaksana skrip Perl. Pastikan penterjemah yang dimuat turun sesuai dengan sistem pengoperasian yang anda gunakan. Bagi pengguna sistem pengoperasian Linux dan Unix, tidak perlu pasang lagi kerana Perl sudah disediakan.

Ada dua kaedah melaksanakan skrip Perl (selain digunakan sebagai aplikasi CGI). Kaedah pertama ialah dengan membina skrip Perl dalam bentuk fail (yang diberi sambungan *.pl atau *.plx). Kemudian melaksanakan program penterjemah Perl dengan fail skrip sebagai parameter. Misalnya skrip berikut ditulis dalam fail skrip 'hello.pl',

print ("Hello dari Perl\n");

Skrip ini boleh dilaksanakan dengan menggunakan arahan berikut pada prom arahan (contoh berikut untuk prom sistem Windows),

c:\perl hello.pl

yang akan menghasilkan output berikut:

Hello dari Perl

Kaedah kedua ialah dengan menggunakan Perl sebaris (one-liner). Pelaksanaan Perl sebaris tidak memerlukan kita membina fail skrip kerana boleh dilaksanakan terus pada prom arahan. Skrip di atas boleh dilaksanakan terus pada prom arahan seperti berikut (dengan penanda pilihan -e),

perl -e "print (\"Hello dari Perl\n\")"

yang memberikan output yang sama. Perl sebaris hanya digunakan bagi atur cara yang ringkas. Namun ada juga atur cara Perl yang nampak seolah kompleks tetapi boleh dipadatkan menjadi Perl sebaris. Misalnya Contoh 1 di atas sebenarnya boleh dipadatkan menjadi Perl sebaris berikut:
perl -e "print grep { /Mohd Yunus/ } <>"  dokumen.txt
Atau
perl -lne "print if /Mohd Yunus/"  dokumen.txt

(Lihat contoh-contoh lain 'Perl sebaris')

Maklumat yang dipaparkan ini hanyalah pengenalan ringkas mengenai Perl. Maklumat lanjut berkenaan Perl boleh dirujuk di Perl.org.



6 comments:

  1. Menarik. Saya juga menggunakan bahasa ini untuk menguruskan system linux hampir dimana-mana. Mudah dijumpai walaupun bilangan pengguna agak rendah, tetapi sangat berguna dan efektif. Dengan kewujudan Moose/Moo protokol objek, Mojolicious/Catalyst/Dancer2, pembangunan web juga turut menjadi mudah.

    ReplyDelete
    Replies
    1. Terima kasih.

      Tak dinafikan di Malaysia mungkin rendah bilangan yg gunakan Perl. Tapi di negara lain banyak. Cuma dgn populariti Python yg semakin bertambah, Javascript pun dah ke paras sistem, dan kewujudan Go dan bahasa skrip baharu yg lain (dan mungkin akan popular) mungkin Perl akan semakin jarang diperkatakan. Tak tahulah kalau Perl_6 + Parrot akan jadikan Perl popular semula.

      Delete
  2. Betul, Perl semakin jarang digunakan dan mungkin akan menjadi seperti ekosistem COBOL atau FORTRAN dimana penggunaannya adalah sangat spesifik dan kurang kepada pembangunan aplikasi umum.

    Go pula lebih kepada pembangunan bahagian server dalam pengetahuan saya, dan kurang digunakan dalam ruang pengurusan Linux ataupun server, tetapi lebih kepada aplikasi dan rangkaian parallel (Docker sebagai contoh).

    Implementasi yang paling aktif digunakan Perl 6 adalah Rakudo (dengan MoarVM) dan saya lihat masih ada perkembangan yang berpotensi untuk digunakan dalam produksi secara global walaupun ekosistem Perl 6 masih sangat muda dan baru.

    Javascript + NodeJS telah menunjukkan kualiti server side development yang bagus, tetapi dibandingkan dengan server side language yang sedia ada seperti Ruby atau C#, Javascript masih mentah dan perlu mengejar apa yang bahasa sedia ada telah capai di bahagian server.

    Model pembangunan web juga telah berubah sedikit demi sedikit dengan penekanan kepada REST, pembangunan untuk telefon pintar juga boleh dilakukan dengan hanya menggunakan teknologi front end web (HTML/CSS/Javascript) melalui Phonegap.

    Banyak bahasa yang lahir setiap hampir setiap 1-2 tahun, dan untuk mengekalkan diri untuk sentiasa mengemaskini pengetahuan teknologi juga menjadi semaking penting dalam pandangan saya.

    Juga terima kasih kerana sudi menghantar komen untuk artikel saya di https://faracosite.wordpress.com.

    ReplyDelete
    Replies
    1. Jika kesempatan, saya juga ingin tahu jika tuan pernah menggunakan Lisp atau dialek seumpanya. Saya baru saja terbaca tentang profail tuan bahawa tuan adalah seorang pensyarah dalam bidang ini. Saya sedang belajar bahasa ini untuk mengetahui kenapa bahasa ini digelarkan sebagai 'programmable programming language'.

      Racket adalah implementasi dan Lisp dialek yang saya gunakan untuk cuba memahami Lisp ataupun kehebatan dan fleksibiliti bahasa ini. Oleh itu saya, telah cuba selesaikan 3 algoritma mudah - https://github.com/faraco/racket-algorithms secara procedural. Tanpa menggunakan makro, bahasa ini sangat pelik tetapi ekspresif dengan keunikan 's-expression' yang saya baru jumpa.

      Jika tuan pernah menggunakan bahasa ini, sudikah tuan menulis dan berkongsi tentang pengalaman juga tips tuan menggunakan bahasa pengaturcaraan yang unik ini? Agak sukar untuk saya mencari individu yang terlibat dengan bidang ini dengan mendalam di Malaysia walaupun melalui internet.

      Delete
    2. Saya tak tahu semua, dan tak arif tentang Lisp. Pernah nak dalami Lisp sbb guna Emacs dan nak bina makronya. Tapi tak teruskan sebab dah jarang guna Emacs, kemudian tak terfikir aplikasi/projek yg perlukan saya guna Lisp. Saya pun tak berapa minat dgn sintaks bahasa fungsional dan logik (saya fokus kpd bahasa imperatif ala-ala C/C++/Java dll). Jd ilmu ttg Lisp mmg takde :D

      Apa yg saya tahu/ingat kelebihan Lisp (selain S-expression tu) ialah makro, boleh define fungsi baharu sbg sbhagian Lisp tu sendiri (lebih kurang macam overload operator dalam C++). Mungkin itu yg dimaksudkan dgn programmable programming language. kebanyakan bahasa tak mampu benarkan pengguna bina kata kunci atau operator baharu. Yg saya tahu pun C++ je dgn operator overloading.

      Delete
    3. "Banyak bahasa yang lahir setiap hampir setiap 1-2 tahun, dan untuk mengekalkan diri untuk sentiasa mengemaskini pengetahuan teknologi juga menjadi semaking penting dalam pandangan saya.
      "
      Betul tu.

      Cabaran nk mahir pelbagai bahasa mungkin akan kurang kalau semua pembina compiler guna pendekatan GCC dan LLVM (yg boleh kompil pelbagai bahasa guna extendible front-end dan pelbagai mesin sasaran guna extendible back-end). Tapi cabaran dan keperluan tu mgkin akan terus ada sbb pembina compiler tak suka/mampu nk bina yg fleksibel macam GCC/LLVM.

      Kalau nak seragamkan model utk pembangunan tu lebih sukar dan mustahil la, masing2 ada idea dan kelebihan sendiri. pndekatan mudah ikut je yg dominan/popular melainkan ada keperluan khusus :D

      Delete