___________________________
Perl: “Dalam Contoh Praktis 1”
( Pengenalan, Instalasi, Tipe data, Operator, Manipulasi data. )
Oleh : Faiq Azmi [
[email protected]]
Untuk umum, hasil kompilasi beberapa sumber. Ver. 02.2008
1
1. Apakah Perl itu. Perl adalah kependekan dari : Practical Extraction and Report Language. Bahasa ini diciptakan oleh Larry Wall pada tahun 1986, pada awalnya digunakan sebagai bahasa program dilingkungan Unix. Bahasa Perl menggabungkan kemampuan bahasa C, Sed, Awk dan Grep dan fitur fitur yang ada di shell Unix. Perl tergolong interpreter, walau bukan murni interpreter. Sebagai interpreter Perl membaca kode sumber atau kode yang ditulis pemrogram. Jika Perl dijalankan Perl akan melakukan kompilasi terhadap semua kode kedalam memory dahulu dan kemudian mengeksekusinya. 2. Pengecheckan Perl di OS. Memeriksa Perl apakah sudah terinstall atau belum didalam sebuah Operating System atau sudah terinstall didalam path system adalah sebagai berikut :
3. Download Perl.
Untuk umum, hasil kompilasi beberapa sumber. Ver. 02.2008
2
Salah satu yang membuat program Perl sangat popular adalah karena bersifat gratis. Program ini dapat didownload dari internet, beberapa site untuk mendownload Perl adalah : •
http://www.perl.com
•
http://www.cpan.org
•
http://www.activestate.com
Operationg System Linux http://downloads.activestate.com/ActivePerl/Linux/ Operating System Windows http://downloads.activestate.com/ActivePerl/Windows/ Operating System Solaris http://downloads.activestate.com/ActivePerl/Solaris/
4. Instalasi Perl. Instalasi Perl sangatlah mudah karena tidak membutuhkan setting yang terlalu rumit. Kebanyakan binary installer sudah dibuat sedemikian rupa sehingga user tinggal mengikuti dari instruksi yang telah ada.
Linux Instalasi. Contoh instalasi di mesin Linux dengan menggunakan file tar.gz. http://downloads.activestate.com/ActivePerl/Linux/5.8/ActivePerl-5.8.8.819-i686-linux-glibc-2.2.4-gcc-267479.tar.gz
Secara default perl akan terinstall didirectory : /opt/ActivePerl-5.8
Untuk umum, hasil kompilasi beberapa sumber. Ver. 02.2008
3
atau waktu instalasi kita bisa merubah directory sesuai keinginan kita setelah mengetik ./install.sh dan ada prompt – prompt pertanyaan di instalasi. Setelah proses instalasi selesai, tambahkan directory /opt/ActivePerl-5.8/bin didalam path OS, akan perl binary bisa diakses dimanapun kita masuk directoy didalam OS tersebut.
Windows Instalasi. Berikut contoh instalasi menggunakan file zip di windows. http://downloads.activestate.com/ActivePerl/Windows/5.8/ActivePerl-5.8.8.822-MSWin32-x86-280952.zip
Extract file ActivePerl-5.8.8.822-MSWin32-x86-280952.zip ke directory c:\Perl Setelah itu masuk ke directory c:\Perl\ActivePerl-5.8.8.822-MSWin32-x86-280952 Jalankan file bat Installer.bat dan silakan ikuti perintah yang ada didalamnya.
Setelah proses instalasi selesai tambahkan directory C:\Perl\bin didalam windows PATH, agar binary perl bisa diakses didirectory manapun kita berada.
5. Instalasi Perl Modul. Didalam Perl sangat banyak modul – modul dan ini sifatnya adalah optional sesuai kebutuhan yang dapat kita pakai dan bisa kita dapatkan secara gratis di internet. Instalasi Perl modul didalam Perl yang biasanya menggunakan extention .pm sangat mudah dan bisa dilakukan siapa saja.
Untuk umum, hasil kompilasi beberapa sumber. Ver. 02.2008
4
Untuk Perl modul bisa didapatkan di http://search.cpan.org . Ada dua cara untuk instalasi modul perl yaitu : a. Download Perl modul dan extract dan compile file source manual. Untuk cara ini kita akan mengambil contoh untuk OS Linux dan Windows.
-
Windows Perl Modul Instalasi. Sebelum melakukan download Perl Modul pastikan didalam windows kita mempunyai compiler, untuk kasus isi penulis menggunakan contoh nmake.exe. Nmake.exe bisa didownload secara gratis di internet dan ukuran filenya yang relative kecil yaitu sekitar 64 KB. Jadi untuk compile di windows yang diperlukan adalah 1. Nmake yg bisa didownload di http://download.microsoft.com/download/vc15/patch/1.52/w95/en-us/nmake15.exe Copy nmake15 didalam path directory dan jalankan sehingga menghasilkan file nmake.exe, dan file log nmake.
2. MinGW ->Minimalist GNU for Windows, adalah aplikasi yg berisi compiler dan yang lainnya Bisa didownload dari http://downloads.sourceforge.net/mingw/ atau http://www.mingw.org cari versi untuk windows : MinGW-5.1.4.exe Run dan install semua componet didalamnya . Misal: Diinstall di c:\mingw maka masukkan path untuk directory c:\mingw\bin Contoh intalasi modul perl CGI-Ajax Download terlebih dahulu Perl Modul CGI-Ajax-0.701.tar.gz laliu kita extract di file tersebut, dalam hal ini bisa menggunakan winzip ataupun winrar, misal kita extract didirectory : C:\Perl\CGI-Ajax-0.701 Setelah itu kita install dan compile seperti terlihat digambar :
Untuk umum, hasil kompilasi beberapa sumber. Ver. 02.2008
5
Proses intalasi modul perl diwindows kali ini ada 3 tahap yaitu : 1. Perl Makefile.PL 2. nmake 3. nmake install. -
Linux Perl Modul Instalasi. Misal kita akan instalasi modul Telnet Client : Pertam kali kita download Perl Modul Net-Telnet-3.03.tar.gz kemudian kita extract didirectory sesuai yang kita mau : Misal kita save file Net-Telnet-3.03.tar.gz directory /.cpan/build 1. Extract file Net-Telnet-3.03.tar.gz Prompt>tar –zxvf Net-Telnet-3.03.tar.gz Prompt>cd /.cpan/build/Net-Telnet-3.03 Prompt>Perl Makefile.PL Prompt>make Prompt>make install
Untuk umum, hasil kompilasi beberapa sumber. Ver. 02.2008
6
b. Menggunakan CPAN modul bawaan Perl. Secara default jika kita menginstall new release Perl akan terinstall juga cpan binary file, yaitu command untuk proses instalasi atau uninstall modul – modul didalam Perl.
-
CPAN di Windows Untuk masuk di cpan prompt ketiklah cpan didalam dos prompt windows. Setelah masuk prompt ketik modul yang akan kita install. Misal kita akan instalasi modul Telnet Client Ketik saja : Cpan>install Net::Telnet
-
CPAN di Linux
Untuk umum, hasil kompilasi beberapa sumber. Ver. 02.2008
7
Untuk masuk cpan prompt dilinux ketik cpan . root>cpan cpan>install Net::Telnet
Pemakaian modul perl biasanya dipanggil / di include dengan menggunakan command use di setiap header perl script. Misal : ---------------------------------------------------------#!/opt/ActivePerl-5.8/bin/perl Use Net::Telnet <some script perl> ----------------------------------------------------------
6. Contoh Awal Perl Script. Program Perl atau bisa juga di sebut sebagai Perl Script adalah berupa berkas teks yang berisi sejumlah pernyataan yang ditulis sesuai dengan bahasa Perl. Kita bisa menulis memakai notepad di windows dan memakai vi editor atau yang sejenis di Linux / Unix. Didalam Linux/Unix header file adalah path dari Perl executable. Contoh: File script perl testing.pl berisi -----------------------------------------#!/opt/Active-Perl.5.8/bin/perl print “Hello World\n”; -----------------------------------------Chmod 755 di Linux/Unix OS untuk bisa di executable standalone. Jika dijalan perl script tersebut mengeluarkan output :
Untuk umum, hasil kompilasi beberapa sumber. Ver. 02.2008
8
------------------------------------------Prompt>./testing.pl Hello World ------------------------------------------Atau bisa juga dijalan dengan menggunakan perintah : ------------------------------------------Prompt>perl testing.pl Hello World ------------------------------------------7. Tipe Data. Secara umum ada 3 tipe data di perl yaitu : Skalar, Array dan Hash. - Skalar : Contoh : $nama1 = ‘Budi’; $nama2 = “Wati”; $angka1 = 4; $angka2 = 3 + 2; - Array : Contoh : @array1 = (‘jambu’, ‘jeruk’,’mangga’); @array2 = (“jambu”,”jeruk”,”mangga”); @array3 = (jambu,jeruk,mangga); $array1[0] = jambu; $array2[1] = jeruk; $array3[2] = mangga;
- Array Asosiatif / Hash: Contoh : %hash1 = (‘jambu’,’1’,’jeruk’,’1’,’mangga’,’2’); %hash2 = (“jambu”,”1”,”jeruk”,”1”,”mangga”,”2”); %hash3 = (“jambu” => ”1”,”jeruk” => ”1”,”mangga” => ”2”);
Untuk umum, hasil kompilasi beberapa sumber. Ver. 02.2008
9
%hash4 = (‘jambu’ => ‘1’,’jeruk’ => ‘1’,’mangga’ => ‘2’); $hash1{jambu} = 1; $hash2{‘jeruk’} = 1; $hash3{“mangga”} = 2; Tipe Data Tabel : Type
Identifier
Description
scalar
$name
a single value (string, numeric, etc.)
list
()
ordered scalar data
@name
a variable that holds a list
array
Example $name=4.6; $name2= "a_string"; @x= (1,2,"three",4.0); @letters= (A..B); @numbers=(0..9); @name=(1,"two",3.14,$something); $listlength= @name; #result is 4 (scalar context) $name{key} = value; $fred_list= %fred; %smooth= ("aaa","bbb","123.4",567.8);
hash
%name
a set of keys and elements
slice: @score{"fred","barney","dino"}= (21,47,6); @league{keys %team1}=values %team1;
8. Operator.
Arithmetic Operators: Operator + * / ** %
Example 7+7 7-7 7*7 7/ 7 7 ** 7 7%7
Result 14 0 49 1 823543 0
Definition Addition Subtraction Multiplication Division Exponents Modulus
Contoh script: Simpan sample file berikut dengan nama file arithmetic.pl #!/opt/ActivePerl-5.8/bin/perl $x = 81; $add = $x + 9; $sub = $x - 9; $mul = $x * 10;
Untuk umum, hasil kompilasi beberapa sumber. Ver. 02.2008
10
$div = $x / 9; $exp = $x ** 5; $mod = $x % 79; print "$x plus 9 is $add \n"; print "$x minus 9 is $sub \n"; print "$x times 10 is $mul \n"; print "$x divided by 9 is $div \n"; print "$x to the 5th is $exp \n"; print "$x modulus 79 is $mod \n";
Setelah kita jalankan output dari arithmetic.pl adalah Prompt>perl arithmetic.pl 81 81 81 81 81 81
plus 9 is 90 minus 9 is 72 times 10 is 810 divided by 9 is 9 to the 5th is 3486784401 modulus 79 is 2
Assignment Operators: Operator += -= *= /= %= **=
Definition Addition Subtraction Multiplication Division Modulus Exponent
Example ($x += 10) ($x -= 10) ($x *= 10) ($x /= 10) ($x %= 10) ($x **= 10)
Contoh script : #!/opt/ActivePerl-5.8/bin/perl $x = 5; print '$x plus 10 is '.($x += 10); print "x is now ".$x; #ADD 10 print '$x minus 3 is '.($x -= 3); print "x is now ".$x; #SUBTRACT 3 print '$x times 10 is '.($x *= 10); print "x is now ".$x. #MULTIPLY BY 10 print '$x divided by 10 is '.($x /= 10); print "x is now ".$x; #DIVIDE BY 10 print 'Modulus of $x mod 10 is '.($x %= 10); print "x is now ".$x; #MODULUS print '$x to the tenth power is '.($x **= 10); print "x is now ".$x; #2 to the 10th
Relational Operators Operator
Example
Defined
Untuk umum, hasil kompilasi beberapa sumber. Ver. 02.2008
Result
11
5 == 5 ==,eq
5 eq 5 7 != 2
!=,ne
7 ne 2 7<4
<,lt
7 lt 4 7>4
>,gt
7 gt 4 7 <= 11
<=,le
7 le 11 7 >= 11
>=,ge
7 ge 11
Test: Is 5 equal to 5? Test: Is 7 not equal to 2? Test: Is 7 less than 4? Test: Is 7 greater than 4? Test: Is 7 less than or equal to 11? Test: Is 7 greater than or equal to 11?
TRUE
TRUE FALSE TRUE
TRUE
FALSE
Logical Operators Operator &&,and ||,or
Defined Associates two variables using AND Associates two variables using OR
Example if (($x && $y) == 5)... if (($x || $y) == 5)...
9. Fungsi
Perl Functions Name qw push(@array,element)
Argument(s) Type commaseparated strings list,scalar
pop(@array) shift(@array) unshift(@array,element) Delete $array[index]
Untuk umum, hasil kompilasi beberapa sumber. Ver. 02.2008
Result Type
Action
list double-quotes arguments Adds to the end of array Removes the last element of the array Removes the first element of an array Adds to the beginning of an array Removes an element by
12
reverse
list
list
sort
list
list
chomp
array or scalar variable
index number Sample : delete $data[0] reverses order of list elements places elements in ascending ascii order removes last record separator from the scalar or from each element of the array
scalar or array, depending on context
as scalar: returns next line of standard input, including newline. as array: returns all lines of input to EOF.
<STDIN>
n/a
<> (diamond)
"
rand
scalar
scalar
srand
none
none
keys
hash
list
values
hash
list
each
hash
2 element list
delete
hash element
n/a
defined
anything
logical
split
regex,string
list
join
string,list
string
Untuk umum, hasil kompilasi beberapa sumber. Ver. 02.2008
as <STDIN> but refers to files listed in @argv returns a random number between zero and (argument-1) initializes the random number generator. returns list consisting of keys in the hash. arbitrary order! returns list containing values in the hash. same arbitrary order returns the next successive key/value pair in the hash removes the referenced element from the hash. example: delete $hashname{"a_key"}; returns FALSE if argument is undef. (usually redundant?) Returns list consisting of parts of string delimited by regex. Default regex is /\s+/ and default string is $_. makes a big string of the elements in list , separated by string
Example: $bigstring= join($glue,@list); Or $rec =
13
join( ,$login,$password);
terminate and print 'message' to STDERR. System error message appended unless \n included. as 'die' but don't terminate.
die "message\n";
warn "message";
10. I/O
I/O
open(HANDLE,">filename");
close(HANDLE); die "message\n"; warn "mess"; <STDIN>, <STDOUT> print [FILEHANDLE] item1,item2,...
File Tests
$readable= -r $filename;
Opens a file for reading. Prefix '>' or '>>' opens to write.
Closes file (happens automatically if reopened or at termination of program) output to STDERR. 'die' terminates program. system message if no '\n' default filehandles for IO write to FILEHANDLE File or directory is -r readable File or directory iw -w writeable File or directory is -x executable File or directory is -o owned by user
$age= -M "/usr/bin/perl"; -R
File or directory is readable by real user, not effective user
-W
File or directory is writable by real user, not effective user
-X
File or directory is executable by real user, not effective user
-O -e
File or directory is owned by real user, not effective user File or directory exists
Untuk umum, hasil kompilasi beberapa sumber. Ver. 02.2008
14
-z
File exists and has zero size (directories are never empty)
-p
File or directory exists and has nonzero size (the returned value is the size in bytes) Entry is a plain file Entry is a directory Entry is a symlink Entry is a socket Entry is a named pipe (a 'fifo')
-b
Entry is a block-special file (like a mountable disk)
-s -f -d -l -S
-c -u -g -k -t -T -B -M -A -C
Entry is a characterspecial file (like an I/O device) File or directory is setuid File or directory is setgid File or directory has the sticky bit set isatty() on the filehandle is true File is "text" File is "binary" Modification age in days Access age in days Inode-modification age in days
11. Flow Control
Flow Control Statement if / unless
Format if (test) {
elsif
statement_block; } elsif (test) {
Untuk umum, hasil kompilasi beberapa sumber. Ver. 02.2008
Comment Note it's spelled elsif, not elseif!
15
else
statement_block; } else { statement_block; } #or exp1 if exp2; exp1 unless exp2; until (test) { statement_block; } #or exp1 while exp2; exp1 until exp2;
while/until do {} while do {} until
do { statement block; } until expression; for (initial_exp; test_exp; reinit_exp) { statement_block; }
for foreach $i (@some_list) { statement_block; } foreach
last [LABEL]
last;
next [LABEL]
next;
redo
redo;
Untuk umum, hasil kompilasi beberapa sumber. Ver. 02.2008
$i may be omitted in which case $_ is assumed. breaks out of the innermost enclosing loop block, or out of the block LABEL . skips remainder of innermost enclosing loop block without exiting the loop. If LABEL is present go to the beginning of the block LABEL. jumps to beginning of the current loop block
16
12. Regular Expressions [REGEX]
Regular Expressions a
. (dot)
/[aeiou]/, /[A-Z]/ \n \000-\377
a single character - matches only itself
matches any single character except newline character class. Matches any single mentioned character. matches newline octal representation
/[^0-9]/
negated character class
\d \w \s
a digit, word-character, or space-character
\D \W \S
NOT a digit, word, or space character
* or {0,}
zero or more of the preceeding character
+ or {1,}
one or more of the preceeding character
? or {0,1} /a{m,n}/ /a{m}/ /a{m,}/
zero or one of the preceeding character "m" to "n" a's. exactly "m" a's "m" or more a's
items matched by parenthesized patterns may be used later in the pattern by '\n' where 'n' refers to the nth parenthesized pattern match. '$n' is a scalar containing the matched string which can be used elsewhere in the script after the pattern match.
/a(.)b(*)c\2d\1/ Precedence
Use (?:pattern ) to prevent the memory function. Parentheses ( ) (?:)
Untuk umum, hasil kompilasi beberapa sumber. Ver. 02.2008
17
Multipliers Sequence & Anchoring Alternation a|b
? + * {m,n} ?? +? *? {m,n}? abc ^ $ \A \Z (?= ) (?! ) |
match pattern 'a' or 'b'
\b (\B) ^a
anchors to a word boundary (NOT a word boundary) requires 'a' as first character in string
a$ \A \Z (?=...) (?!...) $a =~ regular exp m#pattern# $` / $& / $' s/old/new/g
suffices \u, \U, (\l, \L)
requires 'a' as last character in string anchors -- not yet described matches against $a (instead of $_) 'm' indicates use '#' (or whatever follows) as delimeter instead of '/'. read-only variables containing the part of the string before/in/following the match substitute 'new' for 'old'. If 'g' is present, do substitution everywhere. perform substitution g repeatedly i ignore case uppercase (lowercase) the following letter or STRING.
13. Special Variable
Special Variables Symbol
Meaning/Use
Example
$_
Default variable
default i/o target, foreach parameter, match string,...
@_
Subroutine argument list
reference arguments as $_[n] within the subroutine
14. Contoh
Contoh Praktis.
Contoh 1. Open comma delimeted file and generate output. Source file1 : list_telp.txt berisi list dn,date,rupiah -----------------------------------------------21992641097,20080112 17:21:50,5000 21992641098,20080113 15:01:43,530 21992641097,20080112 12:31:55,23000
Untuk umum, hasil kompilasi beberapa sumber. Ver. 02.2008
18
21992641090,20080115 10:23:50,12000 21992641089,20080114 09:10:26,7500 21992641091,20080112 06:40:11,5000 21992641091,20080111 17:21:50,5000 21992641097,20080112 11:27:20,1000
------------------------------------------------Source file1 : min_telp.ext berisi list dn,min delimeted dgn tabulasi ------------------------------------------------21992641097 5109933176323 21992641089 5109974823484 21992641091 5109922783278 21992641090 5109921317332 21992641099 5109990849373 21992641011 5109932232474 21992641022 5109932424211 21992641033 5109922323783 --------------------------------------------------Script file : list_telp.pl output = membuat spasi delimeted, rp add comma. ------------------------------------------------open(fin,"list_telp.txt"); while(
){ $_ =~ s/(\r|\n)+//gi; @data = split(/\,/); # atau ($dn,$tgl,$rp) = split(/\,/); $data[2] =~ s/(\d+?)(?=(\d{3})+(\D|$))/$1,/g; print "$data[0] $data[1] $data[2]\n"; } close(fin); ------------------------------------------------Setelah di jalankan output dari list_telp.pl adalah: ------------------------------------------------21992641097 20080112 17:21:50 5,000 21992641098 20080113 15:01:43 530 21992641097 20080112 12:31:55 23,000 21992641090 20080115 10:23:50 12,000 21992641089 20080114 09:10:26 7,500 21992641091 20080112 06:40:11 5,000 21992641091 20080111 17:21:50 5,000 21992641097 20080112 11:27:20 1,000
---------------------------------------------------Script file : list_telp1.pl output=Jumlahkan rupiah utk telp sama. ------------------------------------------------open(fin,"list_telp.txt");
Untuk umum, hasil kompilasi beberapa sumber. Ver. 02.2008
19
while(){ $_ =~ s/(\r|\n)+//gi; ($dn,$tgl,$rp) = split(/\,/); $dat{$dn} = $dn; $tgl{$dn} .= "$tgl|"; $rp{$dn} += $rp; $count{$dn}++; } close(fin); foreach $hasil ( keys %dat ){ $rp{$hasil} =~ s/(\d+?)(?=(\d{3})+(\D|$))/$1,/g; print "$dat{$hasil} $rp{$hasil} $count{$hasil} $tgl{$hasil}\n"; } ---------------------------------------------------Setelah dijalankan output dari file list_telp1.pl adalah : ---------------------------------------------------21992641089 7,500 1 20080114 09:10:26| 21992641090 12,000 1 20080115 10:23:50| 21992641091 10,000 2 20080112 06:40:11|20080111 17:21:50| 21992641097 29,000 3 20080112 17:21:50|20080112 12:31:55|20080112 11:27:20| 21992641098 530 1 20080113 15:01:43| ---------------------------------------------------Script : list_telp2.pl output = pembanding adalah dn dan rupiah yang sama.
open(fin,"list_telp.txt"); while(){ $_ =~ s/(\r|\n)+//gi; ($dn,$tgl,$rp) = split(/\,/); $dat{$dn,$rp} = $dn; $tgl{$dn,$rp} .= "$tgl|"; $rp{$dn,$rp} = $rp; $count{$dn,$rp}++; } close(fin);
foreach $hasil ( keys %dat ){ $rp{$hasil} =~ s/(\d+?)(?=(\d{3})+(\D|$))/$1,/g;
Untuk umum, hasil kompilasi beberapa sumber. Ver. 02.2008
20
print "$dat{$hasil} $rp{$hasil} $count{$hasil} $tgl{$hasil}\n"; } --------------------------------------------Setelah dijalankan outputnya adalah : --------------------------------------------21992641097 1,000 1 20080112 11:27:20| 21992641090 12,000 1 20080115 10:23:50| 21992641091 5,000 2 20080112 06:40:11|20080111 17:21:50| 21992641089 7,500 1 20080114 09:10:26| 21992641097 23,000 1 20080112 12:31:55| 21992641097 5,000 1 20080112 17:21:50| 21992641098 530 1 20080113 15:01:43| -----------------------------------------------Script: compare.pl cari min di file min_dn.txt untuk file list_dn.txt -----------------------------------------------open(fin0,"min_telp.txt"); while(){ $_ =~ s/(\r|\n)+//gi; ($dn,$min) = split(/\t/); $dat{$dn} = $min; } close(fin0);
open(fin1,"list_telp.txt"); while(){ $_ =~ s/(\r|\n)+//gi; ($dn,$tgl,$rp) = split(/\,/); $dat{$dn} = 'xxxxxxxxxxxxx' if $dat{$dn} eq ''; print "$dn $dat{$dn} $tgl $rp\n"; } close(fin1); -------------------------------------------------Seteleh dijalankan akan menghasilkan output --------------------------------------------------
Untuk umum, hasil kompilasi beberapa sumber. Ver. 02.2008
21
21992641097 5109933176323 20080112 17:21:50 5000 21992641098 xxxxxxxxxxxxx 20080113 15:01:43 530 21992641097 5109933176323 20080112 12:31:55 23000 21992641090 5109921317332 20080115 10:23:50 12000 21992641089 5109974823484 20080114 09:10:26 7500 21992641091 5109922783278 20080112 06:40:11 5000 21992641091 5109922783278 20080111 17:21:50 5000 21992641097 5109933176323 20080112 11:27:20 1000 ---------------------------------------------------Script : Compare1.pl output = komparasi isi file min_dn.txt dan list_dn.txt ---------------------------------------------------open(fin0,"min_telp.txt"); while(){ $_ =~ s/(\r|\n)+//gi; ($dn,$min) = split(/\t/); $dat{$dn} = 1; } close(fin0); open(fin1,"list_telp.txt"); while(){ $_ =~ s/(\r|\n)+//gi; ($dn,$tgl,$rp) = split(/\,/); if ( $dat{$dn} == 1 ){ print "$dn $rp\n";} } close(fin1); ------------------------------------Setelah dijalankan akan menghasilkan output -------------------------------------21992641097 5000 21992641097 23000 21992641090 12000 21992641089 7500 21992641091 5000 21992641091 5000 21992641097 1000 -------------------------------------------
Untuk umum, hasil kompilasi beberapa sumber. Ver. 02.2008
22
15. Kesimpulan. Perl atau Practical Extraction and Report Language dirancang oleh Larry Wall dipertengahan tahun 1980-an / 1986, ketika ingin membuat bug-reporting system namun bahasa pemograman yang tersedia, seperti awk, tidak dapat memenuhi keinginannya. Larry bisa saja waktu itu menggunakan bahasa pemrograman seperti C atau C++, tetapi karena dia menginginkan agar system-nya itu bisa dijalankan melalui shell ala awk, akhirnya memutuskan untuk merancang bahasa baru yaitu Perl.Secara umum, Perl bisa dikategorikan berada diantara bahasa pemograman tingkat tinggi (highlevel programming language) seperti pemograman shell dan bahasa pemograman tingkat rendah (low-level programming language) seperti C, C++ atau assembly. Program yang ditulis dengan bahasa pemrograman tingkat tinggi biasanya lambat dan sangat tergantung pada command yang disediakan oleh operating system. Sebaliknya, program yang ditulis dengan bahasa pemrograman tingkat renda cendrung lebih cepat, namun lebih sulit dalam menuliskannya, walau hampir semua hal dapat ditulis dengan bahasa pemrograman level ini. Perl dirancang untuk menjembatani ketimpangan diantara kedua level bahasa pemrograman di atas.Sejak pertama sekali diperkenalkan sampai dengan saat ini, Perl berkembang dengan sangat cepat. Perl versi 5 yang cukup populer dan stabil, tidak lama lagi akan digantikan dengan Perl versi 6. Versi teranyar ini tentu saja memiliki fitur-fitur yang lebih baik dari versi sebelumnya. Informasi yang lebih lengkap tentang Perl versi terbaru ini dapat anda peroleh di http://dev.perl.org/perl6 dan http://www.pugscode.org. Sebagian Keunggulan Perl Setiap bahasa pemograman pasti memiliki kelebihan dan kelemahan, karena keunggulan suatu bahasa pemograman sangat tergantung pada persoalan apa yang ingin diselesaikan. Perl sangat cocok digunakan untuk menyelesaikan persoalan yang berkaitan dengan teks. Lebih kurang 90% dari kemampuan Perl memang dioptimalisasikan untuk menyelesaikan persoalan-
Untuk umum, hasil kompilasi beberapa sumber. Ver. 02.2008
23
persoalan yang berhubungan dengan teks, sementara sisanya, 10%, untuk menyelesaikan persoalan-persoalan diluar teks. [1]. Bagi para peneliti di bidang bioinformatika, Perl merupakan tool utama dalam melakukan pattern matching dari gen dalam DNA. Sebagaimana kita ketahui, gen merupakan rangkaian nucleotide yang secara formal disimbolkan menggunakan gabungan karacter A (adenine), T (thymine), C (cytosine), dan G (guanine), seperti yang digambarkan pada gambar berikut:Gambar 1. Ilustrasi DNA [2]. Untuk mengetahui apakah terdapat gen tertentu dalam sebuah DNA, tentunya kita harus mencari pattern (yang merupakan kumpulan dari karakter-karakter A, T, C, G) di dalam DNA tersebut. Sebagai gambaran, perhatikan potongan program berikut ini: 1 my $sequence = 'CTAATGGA'; 2 my $pattern = 'ATG'; 3 if($sequence =~ /$pattern/){ 4 print"Pattern $pattern ditemukan dalam sequence $sequence\n"; 5} 6 else{ 7 print "Pattern $pattern tidak ditemukan dalam sequence $sequence\n"; 8} Pada baris ke 1 dan ke 2 di atas, sebuah skalar $sequence dengan nilai CTAATGGA dan skalar $pattern dengan nilai ATG dideklarasikan. Pengecekan apakah pattern ATG terdapat dalam sequence CTAATGGA dapat dengan mudah dilakukan menggunakan fasilitas pattern matching. Menggunakan binding operator, =~, seperti yang dilakukan pada baris ke 3 di atas, Perl memeriksa dengan sangat efisien apakah dalam skalar $sequence terdapat pattern ATG. Untuk contoh di atas, pattern ATG ada dalam sequence CTAATGGA, sehingga pernyataan "Pattern ATG ditemukan dalam sequence CTAATGGA" akan ditampilkan dilayar monitor. Sebenarnya, untuk contoh kasus di atas, bahasa C atau bahasa pemograman lainnya juga dapat digunakan. Namun akan lebih rumit dan panjang. Bila ditulis dengan bahasa C, sudah jelas kita harus berurusan dengan pointer dan iterasi yang memeriksa satu per satu apakah setelah karakter A dua karakter selanjutnya adalah karakter T
Untuk umum, hasil kompilasi beberapa sumber. Ver. 02.2008
24
dan G. Bagaimana pula bila kita ingin menggantikan semua karakter A dalam sebuah sequence DNA menjadi karakter T, karakter C menjadi G, karakter G menjadi C, dan karakter T menjadi A? Dengan bahasa C, salah satu solusinya adalah seperti program sederhana berikut ini: 1 char sequence[32] = 'CTAATGGA'; 2 char *p = sequence; 3 for (; *p != '\0'; p++){ 4 if (*p == 'A') 5 *p = 'T'; 6 else if (*p == 'C') 7 *p = 'G'; 8 else if (*p == 'G') 9 *p = 'C'; 10 Lumayan, tidak begitu sulit juga. Namun yang perlu kita pahami disini adalah, untuk kasus-kasus manipulasi teks seperti kedua contoh di atas, menggunakan Perl jauh lebih mudah. Fungsi tr atau translate dari Perl dapat mengubah setiap karakter yang dimaksud dengan sangat mudah. tr/<pola awal>/<pola baru>/ Fungsi tr menerjemah setiap karakter yang ditemukan di <pola awal> menjadi karakter yang bersesuaian posisinya dibagian <pola baru>. Jadi untuk contoh kasus kedua ini, hanya dengan satu pernyataan saja, perubahan karakter dapat diselesaikan. $sequence =~ tr/ACGT/TGCA/; Bila pada awalnya sequence DNA adalah CTAATGGA, maka dengan pernyataan di atas, sequence DNA berubah menjadi GATTACCT. Masih banyak lagi keunggulan-keunggulan Perl, yang tentunya tidak mungkin kita bahas semuanya dalam tulisan ini. Namun penulis ingin menyampaikan bahwa begitu powerful-nya kemampuan Perl dalam memanipulasi teks dan file, termasuk dalam membuat cgi (common gateway interface). Selain itu, Perl juga merupakan tool yang sangat tepat untuk merancang prototype suatu algoritma. Benar memang kalau Perl bukanlah tool untuk semua hal. Perl bukanlah bahasa pemograman yang tepat untuk
Untuk umum, hasil kompilasi beberapa sumber. Ver. 02.2008
25
merancang kernel, tidak pula untuk merancang program client-server yang membutuhkan penanganan thread dan memori poll yang efisien.
Kelemahan Perl Perl dijalankan menggunakan interpreter. Interpreter Perl disebut perl (menggunakan huruf kecil semua). Perl tidak memiliki compiler yang dapat mengubah source code menjadi bahasa mesin (binary code). Walaupun ada compiler [perl2exe atau perlapp by activestate] namun untuk sebagain modul/client tertentu masih memerlukan interpreter. Program yang ditulis dengan Perl dapat dilihat dengan mudah oleh orang lain yang menjalankan program tersebut, namun tidak kalo sudah di compile dengan perl2exe atau perlapp. Selain itu, tidaklah efisien menulis program yang sangat panjang (mungkin lebih dari 10,000 baris) menggunakan Perl bila program yang ditulis tersebut dijalankan berulang-ulang sebanyak ratusan atau bahkan ribuan kali per menit. Hal ini disebabkan karena setiap program tersebut dijalankan, interpreter perl harus menerjemahkannya ke dalam bytecode yang dipahami oleh compiler internal perl.
Penutup Menggunakan tool yang tepat merupakan kunci sukses dalam menyelesaikan suatu persoalan. Agaknya pernyataan ini juga sangat relevan bagi programmer di dalam memilih bahasa pemrograman untuk menyelesaikan suatu masalah. Industri-industri IT yang bergerak dalam bidang searching engine menggunakan Perl sebagai tool penunjang dalam mengembangkan prototype suatu algoritma karena Perl memang sangat efisien dalam memanipulasi teks, bukan karena Perl itu gratis dengan lisensi GNU-nya. Demikian pula, alasan peneliti di bidang bioinformatika menggunakan Perl untuk mencari pattern yang bersesuaian di dalam sequence DNA adalah karena Perl sangat powerful dengan pattern matching-nya. Dus, bila anda sedang mengembangkan prototype suatu algoritma yang banyak berhubungan dengan teks tetapi anda tidak menggunakan Perl, berarti anda belum menggunakan tool yang tepat. Tidak percaya? Coba Perl!
Untuk umum, hasil kompilasi beberapa sumber. Ver. 02.2008
26
Perl punya banyak cacat. Tapi gading mana yang tak retak? Kalau Anda sedang mempertimbangkan mempelajari Perl, saran saya: lakukanlah. Perl telah membuat hari-hari saya ceria karena saya dapat membuat oneliner-oneliner “sakti” yang butuh belasan-puluhan baris jika harus dikoding dalam shell atau C atau Python. Perl juga akan mengajarkan Anda banyak hal tentang penggunaan regex, tentang ekspresivitas, dan—siapa sangka—tentang readability juga. Tak ada kata tidak untuk belajar.
Daftar Pustaka 1. Dasar Pemrograman Perl – Abdul Kadir , PT. Andi Yogya 2. Blogspot.com 3. www.google.com 4. Pengalaman Penulis.
Last updated 1. 10-Dec-2008 : adding Mingw doc/manual compiler for windows. 2. 11-Dec-2008 : update @array manipulation description.
Untuk umum, hasil kompilasi beberapa sumber. Ver. 02.2008
27