Dokumen tersebut memberikan panduan penggunaan bahasa pemrograman PERL (Practical Extraction and Report Language) untuk membuat script, meliputi penjelasan tentang karakteristik PERL, contoh script sederhana, penggunaan operator, komentar, dan variabel.
1. www.geocities.com/raja_pangalengge/PEd
Tuntunan PERL script
Ir. Naek, MT.
Kepala Laboratorium Pemrograman Jaringan
Divisi Pelatihan & Pengembangan
Bandung – 2007
Reference:
www.itknowledge.com/tpj
www.jmarshall.com/easy/cgi/
www.perl.com/CSPAN/scripts/index.html
Ir. SNMP Simamora, MT., “Pengantar Bahasa Pemrograman dalam Pendekatan Praktis
(Ulasan dalam Bahasa C++, Bahasa BASIC, dan JavaScript)”, Pangalengge Educations,
2006.
PERL, Practical Extraction and Report Language, adalah bahasa pemrograman berbasis
web (script) yang diterjemahkan di sisi server (server based), setiap kali akan dijalankan;
sehingga PERL script tergolong kepada bahasa pemrograman yang diterjemahkan oleh
interpreter seperti halnya: BASIC, JavaScript, PROLOG, VBScript, ASP, PHP. Namun,
berbeda dengan script seperti PHP, ASP, dan JavaScript, PERL dapat dijalankan juga
tanpa tergantung kepada web-browser (platform HTML), karena PERL menggunakan
metode CGI (Common Gateway Interface) agar dapat berinteraksi dengan web-server dan
disamping juga PERL merupakan bahasa pemrograman standar yang digunakan pada
lingkungan sistem operasi UNIX.
Jadi bisa disimpulkan bahwa PERL identik dengan BASIC pada lingkungan sistem
operai DOS.
Seperti ditunjukkan pada tampilan berikut ini:
Setelah menentukan jalinan letak interpreter PERL pada direktori disk, tuliskan jalinan
jalur sinkronisasi penerjemahan pada lingkungan command DOS sebagai berikut:
C:set path=c:Program Filessambar41perl
1
2. www.geocities.com/raja_pangalengge/PEd
Pada kesempatan kali ini, interpreter yang digunakan adalah PERL 5 dengan
menggunakan Sambar Server v4.1, seperti terlihat berikut ini:
Tampilan default welcome page server ini adalah sebagai berikut:
2
3. www.geocities.com/raja_pangalengge/PEd
Script pertama Anda!
Misalkan akan ditampilkan sebuah string:” Selamat Datang di kota Dolok Sanggul.”
ke layar komputer.
hallo.pl
print quot;Selamat Datang di kota Dolok Sanggul.quot;;
Dijalankan menggunakan lingkungan interpreter konvensional (platform DOS, dengan
metode command-line), yakni sebagai berikut
Dijalankan menggunakan platform Sambar Server v4.1, sebagai berikut:
Latihan berikutnya, mengadopsi dari contoh sebelumnya, akan ditambahkan satu
baris setelah kalimat pertama:”Pesan dari Pangalengge Educations.”.
hallo1.pl
print quot;Selamat Datang di kota Dolok Sanggul.nquot;;
print quot;Pesan dari Pangalengge Educations.quot;;
Harus diperhatikan bahwa perintah ‘n’ (ganti baris baru) diletakkan di akhir baris
script; berbeda pada Bahasa Pemrograman C/C++, yang dapat diletakkan di awal
baris sintaks.
3
4. www.geocities.com/raja_pangalengge/PEd
Namun, perintah ‘n’ tidak dapat diterjemahkan oleh interpreter Sambar Server
v4.1, sehingga digantikan dengan tags ‘<br>’.
Berikutnya sebuah perhitungan arithmatika disajikan sebagai berikut:
hasil (a * (c – b)) MOD c;
dimana, nilai masing-masing variabel diisikan sebagai berikut:
a5 ; b -3 ;c 2
Sintaksnya sebagai berikut:
ngitung.pl
$a=5;
$b=-3;
$c=2;
$hasil=($a*($c-$b))%$c;
print quot;Hasil = quot;, $hasil;
Hasil perhitungan ini sama dengan 1, diperoleh dari:
hasil (5 * (2 – -3)) MOD 2;
hasil (5 * 5) MOD 2;
hasil 25 MOD 2;
hasil 1;
Hitunglah aljabar berikut ini:
(a + b + c + d ÷ e )
M=
5
dimana: a = -8 b = -2 c = 12
d=6 e=2
Aljabar ini dalam PERL script dituliskan:
M = (a+b+c+d÷e)/5;
Dan M=1.
4
5. www.geocities.com/raja_pangalengge/PEd
aljabar.pl
$a=-8;
$b=-2;
$c=12;
$d=6;
$e=2;
$m=($a+$b+$c+$d/$e) / 5;
print quot;Hasil = quot;, $m;
Lalu bagaimana bila masukan suatu nilai diinginkan dari user, bukan langsung
terdeklarasikan pada badan program?
Persoalan ini dapat diselesaikan menggunakan bantuan tags HTML, sebagai berikut:
bukutamu.htm
<HTML>
<HEAD><TITLE>.:Catatan Kunjungan:.</TITLE></HEAD>
<BODY bgcolor=white text=black link=black vlink=black alink=black>
<CENTER>
<FONT SIZE=5 COLOR=#996633><B>Silahkan isi Buku Tmu:</B></FONT>
</CENTER>
<BR>
<BR>
<FORM METHOD=POST ACTION=quot;/cgi-bin/bukutamu.plquot;>
<TABLE border=0 cellpadding=5>
<TR>
<TD>Nama (<I>diisi</I>)</TD>
<TD><INPUT TYPE=text NAME=name size=40></TD></TR>
<TR>
<TD>e-mail</TD>
<TD><INPUT TYPE=text NAME=email size=40></TD></TR>
<TR><TD>Pesan (<I>diisi</I>)</TD>
<TD><TEXTAREA NAME=msg COLS=60 ROWS=4></TEXTAREA></TD>
</TR>
<TR>
<TD></TD>
<TD><INPUT TYPE=submit VALUE=quot;Okequot;></TD>
</TR>
</TABLE>
</FORM>
</BODY>
</HTML>
bukutamu.pl
read(STDIN, $data, $ENV{'CONTENT_LENGTH'});
@pairs = split(/&/, $data);
foreach $pair (@pairs)
{
($name, $value) = split(/=/, $pair);
# Convert the HTML encoding
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack(quot;Cquot;, hex($1))/eg;
$value =~ s/<!--(.|n)*-->//g;
5
6. www.geocities.com/raja_pangalengge/PEd
# Convert HTML stuff as necessary.
$value =~ s/<([^>]|n)*>//g;
$FORM{$name} = $value;
}
&missing_name unless $FORM{'name'};
&missing_msg unless $FORM{'msg'};
open (FILE, quot;$bookfilequot;) || die quot;Can't open $bookfile: $!nquot;;
@LINES=<FILE>;
close(FILE);
$SIZE=@LINES;
open (FILE, quot;>$bookfilequot;) || die quot;Can't open $bookfile: $!nquot;;
for ($i = 0; $i <= $SIZE; $i++)
{
$_=$LINES[$i];
if (/<!--top-->/)
{
print FILE quot;<!--top-->nquot;;
print FILE quot;<b>$FORM{'msg'}</b><br>nquot;;
print FILE quot;$FORM{'name'}quot;;
if ($FORM{'email'})
{
print FILE quot; <<A HREF=quot;mailto:$FORM{'email'}quot;>quot;;
print FILE quot;$FORM{'email'}</A>>quot;;
}
print FILE quot;<HR>nquot;;
}
else
{
print FILE $_;
}
}
close (FILE);
print quot;<HTML><HEAD><TITLE>.:Selesai:.</TITLE></HEAD><BODY bgcolor=white>nquot;;
print quot;<FONT SIZE=5 COLOR=#996633><B>Terima kasih Atas
Kunjungannya</B></FONT>nquot;;
print quot;<BR><BR>Data Anda berikut telah terseimpan di Buku Tamu kami::<HR>nquot;;
print quot;<b>$FORM{'msg'}</b><br>nquot;;
print quot;$FORM{'name'}quot;;
if ($FORM{'email'})
{
print quot; <<A HREF=quot;mailto:$FORM{'email'}quot;>quot;;
print quot;$FORM{'email'}</A>>quot;;
}
print quot;<P><HR>nquot;;
print quot;<A HREF=quot;/latihan/bukutamu.htmquot;>Isian Buku Tamu.</A>nquot;;
print quot;</BODY></HTML>nquot;;
6
7. www.geocities.com/raja_pangalengge/PEd
exit;
sub missing_name
{
print quot;<HTML><HEAD><TITLE>Missing Name</TITLE></HEAD><BODY>nquot;;
print quot;<FONT SIZE=5 COLOR=#996633><B>Name field is blank...</B></FONT>nquot;;
print quot;<BR><BR>Please repost the name section of the guestbook.<P>nquot;;
print quot;Return to the <a href=quot;/samples/book.htmquot;>Guest Book</a>.nquot;;
print quot;</BODY></HTML>nquot;;
exit;
}
sub missing_msg
{
print quot;<HTML><HEAD><TITLE>Missing Comments</TITLE></HEAD>nquot;;
print quot;<FONT SIZE=5 COLOR=#996633><B>Comment field is
blank...</B></FONT>nquot;;
print quot;<BR><BR>Please repost the comment section of the guestbook.<P>nquot;;
print quot;Return to the <a href=quot;/samples/book.htmquot;>Guest Book</a>.nquot;;
print quot;</BODY></HTML>nquot;;
exit;
}
Untuk menjalankannya digunakan interpreter Sambar Server v4.1 dengan
metode CGI, seperti ditunjukkan pada tampilan berikut ini:
7
8. www.geocities.com/raja_pangalengge/PEd
Komentar
Komentar dalam suatu bahasa pemrograman digunakan untuk menjelaskan maksud
deklarasi suatu baris program (yang disebut dengan statement).
Contoh:
komentar.pl
#Baris ini tidak dieksekusi oleh interpreter
print quot;Baris ini dieksekusi oleh interpreterquot;;
konstanta1.pl
$a=35; #a diisikan 5
$a/=5; #hasil pembagian a thd. 5 diisikan ke a
print $a; #tampilkan isi a yang baru
Artinya, dalam menuliskan komentar pada badan program, setiap bahasa
pemrograman, termasuk PERL menggunakan karakter khusus ‘#’ untuk mengawali
statement komentar, seperti juga pada bahasa pemrograman/script yang lain seperti:
C/C++ menggunakan karakter ‘//’ dan ‘/*’ untuk mengawali dan ‘*/’ untuk
mengakhiri.
JAVA dan JavaScript menggunakan karakter ‘//’ di awal komentar
BASIC menggunakan karakter ’ di awal komentar
Disamping itu, karakter komentar ini juga biasa digunakan oleh pemrogram untuk
memeriksa suatu statement program jika ditemukan bugs (kesalahan) saat
script/sintaks diterjemahkan oleh translator.
Deklarasi suatu variabel terlebih dahulu dituliskan lalu diikuti/dilanjutkan dengan
penulisan statement penugasan.
Misalkan script berikut akan memberikan nilai Z=0:
hindari.pl
8
9. www.geocities.com/raja_pangalengge/PEd
$Z=$a+$b;
$a=-9;
$b=7;
print $a ,quot; + quot;, $b ,quot; = quot;, $Z;
Operator
Operator digunakan untuk mengerjakan isi operand berdasar jenis instruksi yang
ditentukan pada badan program.
Misalkan:
z ← a+b
maka, a dan b disebut dengan operand, dikerjakan menggunakan operator ‘+”
dimana hasil pengerjaannya dimasukkan ke z oleh operator assignment ‘=’ (dalam
pseudocode, ‘=’ dituliskan ‘←’) maka z disebut hasil operasi.
Operator yang dikenal script PERL antara lain:
Operator Arithmatika
• Penjumlahan
Misalkan:
Z ← a + b;
jumlah.pl
$a=-9;
$b=7;
$Z=$a+$b;
print $a ,quot; + quot;, $b ,quot; = quot;, $Z;
• Pengurangan
Misalkan:
Z ← a – b;
kurangkan.pl
$a=-9;
$b=7;
$Z=$a-$b;
print $a ,quot; - quot;, $b ,quot; = quot;, $Z;
• Perkalian
Misalkan:
Z ← a x b;
kali.pl
$a=-9;
$b=7;
$Z=$a*$b;
print $a ,quot; x quot;, $b ,quot; = quot;, $Z;
• Pembagian
Misalkan:
Z ← a ÷ b;
bagikan.pl
$a=-63;
$b=7;
$Z=$a/$b;
print $a ,quot; / quot;, $b ,quot; = quot;, $Z;
9
10. www.geocities.com/raja_pangalengge/PEd
• Pembagian Bersisa (Modulus)
Misalkan:
Z ← a mod b;
Jika a=-69, dan b=7, maka Z=-6; namun karena keterbatasan interpreter
PERL, hasilnya = 1.
Untuk itu, pada script digunakan penanganan khusus pengerjaan operator
modulus untuk operand yang dibagi bernilai negatip.
bagisisa.pl
$a=-69;
$b=7;
$Z=(($a*-1)%$b)/-1;
print $a ,quot; % quot;, $b ,quot; = quot;, $Z;
Bedakan dengan script berikut:
bagisisa1.pl
$a=69;
$b=7;
$Z=$a%$b;
print $a ,quot; % quot;, $b ,quot; = quot;, $Z;
• Trigonometri: Sine
Ingat! 3600 = 2π radian
10 = (2π ÷ 3600) radian
= (1 ÷ 57.2958) radian
Sin 300 = 0.5
Sin 900 = 1
sine.pl
$sin30=sin(30/57.2958);
$sin90=sin(90/57.2958);
print quot;Sin 30 = quot;, $sin30 ,quot;nquot;;
print quot;Sin 90 = quot;, $sin90;
• Trigonometri: Cosine
Analog dengan kasus sine sebelumnya:
Cos 300 = 0.866025
Cos 900 = 0
cosine.pl
$cos30=cos(30/57.2958);
$cos90=cos(90/57.2958);
print quot;Cos 30 = quot;, $cos30 ,quot;nquot;;
print quot;Cos 90 = quot;, $cos90;
• Trigonometri: Tangent
Analog dengan kasus sine sebelumnya:
Tan 300 = 0.577349
Tan 450 = 1
tangent.pl
$a=(30/57.2958);
$sinus30=sin($a);
$cosinus30=cos($a);
$b=(45/57.2958);
$sinus45=sin($b);
10
11. www.geocities.com/raja_pangalengge/PEd
$cosinus45=cos($b);
$tgt30=($sinus30)/($cosinus30);
$tgt45=($sinus45)/($cosinus45);
print quot;Tan 30 = quot;, $tgt30 ,quot;nquot;;
print quot;Tan 45 = quot;, $tgt45;
• Bilangan Acak
acakkan.pl
$acak=rand();
print quot;Bilangan yang muncul: quot;, $acak;
• Nilai Absolut
Misalkan:
a = -0.45, maka nilai absolut(a) = 0.45
absolut.pl
$a=-0.45;
$Z=abs($a);
print quot;Nilai absolut quot;, $a ,quot; = quot;, $Z;
• Operator Logika, digunakan untuk menyatakan gerbang logika AND dan OR:
AND, disimbolkan dengan ‘&&’, menyatakan bahwa keluaran bernilai 1 (TRUE)
jika dan hanya jika kedua masukan bernilai 1 (TRUE).
lAnd.pl
$ini='r';
$itu='R';
$bil=7;
if($bil<7 && $ini=='s') {
print quot;Isi variabel ini adalah karakter squot;;
}
if(($bil>=7 && $itu=='R')||$ini=='s') {
print quot;Isi variabel bil adalah 7quot;;
}
OR, disimbolkan dengan ‘||’, menyatakan bahwa keluaran bernilai 1 (TRUE)
jika dan hanya jika salah satu masukan bernilai 1 (TRUE).
lOr.pl
$ini=quot;Aquot;;
$itu=quot;aquot;;
$bil=7;
if(($bil<=7 && $itu==quot;aquot;)||$ini==quot;aquot;) {
print quot;Isi variabel itu adalah karakter aquot;;
}
if($bil>7 || $itu==quot;Aquot;) {
print quot;nIsi variabel bil adalah 7quot;;
}
Karena ‘n’ tidak dapat diterjemahkan oleh Sambar Server v4.1, maka
diganti dengan tags ‘<br>’.
• Operator ‘==’ ≠ ‘=’
Operator ‘==’ (disebut operator equality) digunakan untuk pembanding isi
antara dua variabel pada logika AND dan OR.
11
12. www.geocities.com/raja_pangalengge/PEd
Misalkan: Akan ditampilkan pesan “Apakabar?” jika a dan b masing-masing
diisi nilai 23 dan 32, selain nilai itu akan ditampilkan pesan “Mau ke mana?”.
opequal.pl
$a=32;
$b=23;
if($a==23&&$b==32) {
print quot;Apakabar?quot;;
} else {
print quot;Mau ke mana?quot;;
}
Sedangkan operator ‘=’ (disebut operator assignment) digunakan sebagai
penugas untuk memindahkan hasil suatu pengerjaan operasi arithmatika ke
sebuah operator lain.
Misalkan: a=23 ; b=32 jika hasil a+b disimpankan ke c, maka didapatkan
c=55
opassign.pl
$a=32;
$b=23;
$c=$a+$b;
print quot;Isi c = quot;, $c;
• Operator Akar Pangkat 2
Misalkan: 4 = 2
akarpkt.pl
$a=4;
$hasil=sqrt($a);
print quot;Akar quot;, $a ,quot; = quot;, $hasil;
• Bilangan Natural (e = )
Misalkan mencari nilai eksponensial suatu bilangan:
e2 = 7.39
eksponensial.pl
$bil=2;
print quot;Nilai e pangkat quot;, $bil ,quot; = quot;, exp($bil);
e = 2.7183
ekspo.pl
$bil=exp(1);
print quot;Bilangan e = quot;, $bil;
• Logaritma Natural (Log-N)
Misalkan : log(s), artinya → mendapatkan nilai logaritma natural dari s
(bilangan dasar e).
log(2.718282) = 1.0
log(7.389056) = 2.0
logN.pl
$bil=2.718282;
$hasil=log($bil);
print quot;Log-Natural(quot;, $bil ,quot;) = quot;, $hasil;
• Logaritma 10 (menggunakan bilangan dasar 10)
12
13. www.geocities.com/raja_pangalengge/PEd
Keterbatasan PERL, dibandingkan dengan JavaScript dan C/C++ dalam
operasi logaritma, adalah tidak disediakannya fungsi log10() untuk
menghitung nilai logaritma dalam bilangan dasar 10; dimana yang disediakan
adalah fungsi log() yang digunakan untuk menghitung nilai logaritma
alam/logaritma natural (ln) dengan bilangan dasar e. Sehingga untuk
menghitung nilai logaritma bilangan dasar 10, dalam JavaScript dan
C/C++ dituliskan log10(), digunakan rumus:
ln( x)
log( x) =
ln(10)
Dalam bidang Teori Matematika Dasar nilai kedua fungsi logaritma ini dicari
menggunakan sebuah tabel. Bila x adalah sebuah bilangan bulat (integer),
carilah nilai log-nya dan ln-nya untuk x=1000.
Ingat!
log b c ⇔ a c = b
a
log10.pl
$bil=1000;
$hasil=(log($bil))/(log(10));
print quot;ln(quot;, $bil ,quot;) = quot;, log($bil) ,quot;nquot;;
print quot;Log(quot;, $bil ,quot;) = quot;, $hasil;
• eX-clusive-OR (disimbolkan ‘⊕’), dalam script PERL dituliskan ‘^’
Aloritma Gerbang Logika XOR menyebutkan: keluaran bernilai 1, jika dan hanya
jika jumlah bit masukan kelipatan ganjil; sebaliknya bernilai 0 jika bit masukan
kelipatan genap.
Simbol dalam rangkaian logika:
Tabel Kebenaran
Logika X-OR
+B
A B A
0 0 0
0 1 1
1 0 1
1 1 0
Misalkan: DEC2 ⊕ DEC3 = DEC1
Karena interpreter PERL dijalankan dalam platform 16-bit (DOS), maka
1byte=16bit, sehingga:
DEC2 = 0000 0000 0000 0010
DEC3 = 0000 0000 0000 0011
Maka: 0000 0000 0000 0010
0000 0000 0000 0011 ⊕
0000 0000 0000 0001 ⇒ DEC1
exor.pl
$a=2;
$b=3;
$hasil=($a)^($b);
print quot;Hasil = quot;, $hasil;
13
14. www.geocities.com/raja_pangalengge/PEd
Operator Unary
Yang dimaksud dengan operator unary adalah operator yang hanya
menggunakan sebuah operand saja. Misalkan: 2 + 1 adalah dua operand yang
nilainya bernilai sama dengan 3; dalam operator unary, dapat dinyatakan
menjadi: 2++.
Operator unary biasanya digunakan untuk pengerjaan pencacahan
(menambah/mengurangkan suatu bilangan dengan nilai 1).
Pre-increment: tambahkan isi $a dengan 1, hasilnya masukkan ke $a
preincre.pl
$a=3;
$hasil=++$a;
print quot;Nilai: quot;, $hasil;
Hasil = 4.
Post-increment: masukkan isi $b, lalu tambahkan 1 ke isi $b
postincre.php
$b=3;
$hasil=$b++;
print quot;Nilai: quot;, $hasil;
Hasil = 3.
Pre-decrement: kurangkan isi $c dengan 1, hasilnya masukkan ke $c
predecre.php
$c=3;
$hasil=--$c;
print quot;Nilai: quot;, $hasil;
Hasil = 2.
Post-decrement: masukkan isi $d, lalu kurangkan isi $b dengan 1
postdecre.php
$d=3;
$hasil=$d--;
print quot;Nilai: quot;, $hasil;
Hasil = 3.
Eksklusifitas script PERL terletak dalam penanganan string jika dioperasikan
menggunakan arithmatika maupun logika.
Misalkan: $a, dan $b masing-masing tipe data string yang diisikan dengan nilai:
17 dan 2; maka:
Jika ditetapkan statement berikut:
$hasil1=$b+$a; + = dijumlahkan
$hasil2=$a+$b; + = di-OR-kan
maka didapatkan:
Isi variabel hasil1 = 19, dan
Isi variabel hasil2 = 19
DEC17 = 0000 0000 0001 0001
+
DEC 2 = 0000 0000 0000 0010
DEC19 = 0000 0000 0001 0011
concate.pl
$a=quot;17quot;;
$b=quot;2quot;;
$hasil1=$b+$a;
$hasil2=$a|$b;
print quot;Isi variabel hasil1 = quot;, $hasil1;
print quot;nIsi variabel hasil2 = quot;, $hasil2;
14
15. www.geocities.com/raja_pangalengge/PEd
Operator Penugasan (assignment digunakan untuk
operator),
mengalihkan/memindahkan hasil operasi arithmatika atau logika ke sebuah
variabel.
Misalkan:
$a=6;
$b=4;
jika:
$a+=b;
maka
$a=10
assignment1.pl
$a=6;
$b=4;
$a+=$b;
print quot;Isi variabel a = quot;, $a;
jika:
$a-=b;
maka
$a=2
assignment2.pl
$a=6;
$b=4;
$a-=$b;
print quot;Isi variabel a = quot;, $a;
jika:
$a*=b;
maka
$a=24
assignment3.pl
$a=6;
$b=4;
$a*=$b;
print quot;Isi variabel a = quot;, $a;
jika:
$a/=b;
maka
$a=1.5
assignment4.pl
$a=6;
$b=4;
$a/=$b;
print quot;Isi variabel a = quot;, $a;
jika:
$a*=b;
maka
$a=2
assignment5.pl
$a=6;
$b=4;
15
16. www.geocities.com/raja_pangalengge/PEd
$a%=$b;
print quot;Isi variabel a = quot;, $a;
jika:
$a&=b;
maka
$a=4
assignment6.pl
$a=6;
$b=4;
$a&=$b;
print quot;Isi variabel a = quot;, $a;
jika:
$a*=b;
maka
$a=6
assignment7.pl
$a=6;
$b=4;
$a|=$b;
print quot;Isi variabel a = quot;, $a;
jika:
$a⊕=b;
maka
$a=2
assignment8.pl
$a=6;
$b=4;
$a^=$b;
print quot;Isi variabel a = quot;, $a;
Mekanisme untuk membuka dan menampilkan isi sebuah file teks
Misalkan, dibuat sebuah file teks dengan nama: oke.txt dan isi-nya dituliskan
sebagai berikut:
oke.txt
#!/usr/bin/perl
# Testdatei cgi-test.pl
use CGI qw(:standard);
use CGI::Carp qw(fatalsToBrowser);
print header(),
start_html(quot;Hello CGIquot;),
p(quot;Hello CGIquot;),
end_html();
Lalu disimpankan ke folder contoh, dengan struktur direktori source code script
berada dalam direktori yang sama dengan folder contoh, maka cara untuk
menampilkan isi oke.txt dituliskan dalam script sebagai berikut:
bukafile1.pl
$berkas=quot;contoh/oke.txtquot;;
open (berkas) || die quot;Tidak dapat membuka filenquot;;
16
17. www.geocities.com/raja_pangalengge/PEd
print <berkas>;
close (berkas);
Tampilan jalannya script:
Akhir baris dari isi file oke.txt
diberikan ‘new-line’ (ditekan
ENTER)
Konversi Bilangan Desimal ke Basis Bilangan Lain
• DEC ke HEX
Misalkan:
3510 = (...)16
Algoritma-nya:
35 ÷ 16 = 2 sisa 3
2 ÷ 16 = 0 sisa 2
Dituliskan: 23h atau 2316
Jika dibalikkan, 23h = DEC…?, maka:
23h = (2x161)+(3x160) = 32+3 = 3510
Bilangan Heksadesimal dituliskan dengan prefix:’0x’.
Tabel Konversi DEC-HEX (0 s.d 17):
DEC HEX
0 0
1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8
9 9
10 A
11 B
12 C
13 D
17
18. www.geocities.com/raja_pangalengge/PEd
14 E
15 F
16 10
17 11
hex2dec.pl
$a=23;
print quot;0xquot;, $a ,quot; dalam desimal = quot;, hex($a);
• DEC ke OCT
Misalkan:
3510 = (...)8
Algoritma-nya:
35 ÷ 8 = 4 sisa 3
4 ÷ 8 = 0 sisa 4
Dituliskan: 0438 atau 438
Jika dibalikkan, 438 = DEC…?, maka:
438 = (4x81)+(3x80) = 32+3 = 3510
Bilangan Oktal dituliskan dengan prefix:’0’.
Tabel Konversi DEC-OCT (0 s.d 17):
DEC HEX
0 0
1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 10
9 11
10 12
11 13
12 14
13 15
14 16
15 17
16 20
17 21
oct2dec.pl
$b=43;
print quot;0quot;, $b ,quot; dalam desimal = quot;, oct($b);
Komputer senantiasa
menampilkan dalam bilangan
Desimal
18
19. www.geocities.com/raja_pangalengge/PEd
Mekanisme konversi suatu karakter ke bilangan
Sintaks-nya:
ord($kara);
kar2num.pl
$a1='A';
$a2='a';
print quot;Karakter quot;, $a1 ,quot; dikodekan DECquot;, ord($a1);
print quot;nKarakter quot;, $a2 ,quot; dikodekan DECquot;, ord($a2);
Mekanisme konversi suatu bilangan ke karakter
Sintaks-nya:
chr($bil);
num2char.pl
$a1=65;
$a2=95;
print quot;DEC quot;, $a1 ,quot; direpresentasikankan menjadi karakter quot;, chr($a1);
print quot;nDEC quot;, $a2 ,quot; direpresentasikankan menjadi karakter quot;, chr($a2);
Contoh: Menampilkan Tabel ASCII 8-bit dari DEC65 s.d DEC75.
ascii6575.pl
print quot;Tabel ASCIInquot;;
print quot;==============nquot;;
for($i=65;$i<=75;$i++) {
print $i ,quot;tquot;, chr($i) ,quot;nquot;;
}
#’t’ artinya tabulasi (tab)
Tampilan jalannya script ascii6575.pl:
Mekanisme menerima input dari user
Dalam script PERL dilakukan dengan dua mekanisme, yaitu ‘<STDIN>’ atau cukup
dengan ‘<>’, dan fungsi chomp().
Misalkan terlihat pada contoh berikut:
- User diajukan sebuah pertanyaan tentan berapa umurnya sekarang dan
sekolah dimana.
19
20. www.geocities.com/raja_pangalengge/PEd
tanya.pl
print quot;Berapa umur Anda?: quot;;
$umur = <>;
print quot;WOW! Umur Anda ternyata quot;, $umur ,quot; tahun!quot;;
print quot;nSekarang sekolah di mana?: quot;;
$sekolah=<stdin>;
print quot;Anda sekolah di quot;, $sekolah ,quot; ya....quot;;
Hasil jalannya script tanya.pl:
Terlihat, saat user-input akan ditampilkan memberi keadaan baris baru terhadap
kata yang mengikutinya selanjutnya (ada ‘ENTER’).
Untuk meniadakan keadaan ini, digunakan fungsi chomp() seperti berikut ini:
tanya1.pl
print quot;Berapa umur Anda?: quot;;
chomp($umur=<>);
print quot;WOW! Umur Anda ternyata quot;, $umur ,quot; tahun!quot;;
print quot;nSekarang sekolah di mana?: quot;;
chomp($sekolah=<stdin>);
print quot;Anda sekolah di quot;, $sekolah ,quot; ya....quot;;
Tampilan jalannya script tanya1.pl:
20
21. www.geocities.com/raja_pangalengge/PEd
Contoh: Analog dengan script ascii6575.pl, namun batas bawah=65, dan
batas atas=75 didapatkan dari user-input:
asciit.pl
print quot;Kode dimulai dari?: quot;;
$bawah=<>;
print quot;Kode diakhiri pada?: quot;;
$atas=<>;
print quot;nquot;;
print quot;Tabel ASCIInquot;;
print quot;==============nquot;;
for($i=$bawah;$i<=$atas;$i++) {
print $i ,quot;tquot;, chr($i) ,quot;nquot;;
}
Hasil jalannya script asciit.pl sebagai berikut:
Dari contoh ini bisa disimpulkan bahwa <STDIN> digunakan jika user-input tidak
perlu ditampilkan ke layar komputer; sedangkan jika harus ditampilkan
digunakan fungsi chomp().
Contoh: - Meminta user-input nilai jari-jari sebuah lingkaran, lalu selanjutnya akan
dihitung berapa diamater, keliling, dan luas lingkaran.
lingkaran.pl
print quot;Tentukan jari-jari lingkaran?(cm): quot;;
chomp ($r = <>);
$diameter = (2 * $r);
$luas = (3.14 * ($r ** 2));
$K = ($diameter * 3.14);
print quot;Jika sebuah lingkaran dengan jari-jari = quot;, $r ,quot;cm maka:nquot;;
print quot;Diameter = quot;, $diameter ,quot;cmnquot;;
print quot;Keliling = quot;, $K ,quot;cmnquot;;
print quot;Luas = quot;, $luas ,quot;cm^2quot;;
21
22. www.geocities.com/raja_pangalengge/PEd
Struktur Kendali
Dengan adanya control structure memungkinkan pemrogram menspesifikasikan
logika pemrograman (programs) maupun kontrol aliran jalannya penerjemahan script
yang dikehendaki.
Dengan demikian, script yang dijalankan interpreter akan menerapkan segala urutan
kondisi logika dimana jika memberi hasil true akan menjalankan step script
selanjutnya; di lain hal akan menolak mengerjakannya.
Ini bertujuan agar translator dapat memahami maksud dan tujuan dari pemrogram
dalam aplikasi yang dibangun.
Klasifikasi struktur kendali umumnya terbagi atas:
If-then else statement
Bentuk Umum:
if( )
kondisi ini bernilai true
{
kerjakan statement ini;
} else {
kerjakan statement ini;
}
Contoh:
ifthenelse.pl
$a=4;
if($a<=5) {
print quot;Isi variabel a di bawah nilai 5.quot;;
} else {
print quot;Isi variabel a di atas nilai 5.quot;;
}
Contoh:
ifthenelse1.pl
print quot;Masukkan bilangan 0 s.d 9: quot;;
$a=<>;
if($a<0||$a>9) {
print quot;Maaf, di luar range!quot;;
} else {
print quot;Anda telah benar memasukkan bilangannya.nquot;;
print quot;Terima kasih, dan semoga permohonan Anda selama ini terkabulkan...quot;;
}
Tampilan jalannya script ifthenelse1.pl:
22
23. www.geocities.com/raja_pangalengge/PEd
Do..while statement
Bentuk Umum:
Do
{
kerjakan statement ini;
while( )
kondisi ini bernilai true
}
Contoh:
dowhile.pl
$a=5;
do {
$a-=1;
print $a ,quot;nquot;;
} while ($a>0);
While statement
Bentuk Umum:
while( )
kondisi ini bernilai true
{
kerjakan statement ini;
}
Contoh:
while.pl
$a=5;
while ($a>0)
{
$a-=1;
print $a ,quot;nquot;;
}
For … i statement
Bentuk Umum:
for( )
kondisi ini bernilai true
{
kerjakan statement ini;
}
Contoh:
fori.pl
for($a=5;$a>0;--$a) {
print $a ,quot;nquot;;
}
Contoh: - dengan menggunakan statement kendali for..i, buatlah tampilan
seperti berikut ini:
i=0; j=0
i=0; j=1
i=0; j=2
i=1; j=0
i=1; j=1
i=2; j=0
i=2; j=2
23
24. www.geocities.com/raja_pangalengge/PEd
fori00.pl
for($i=0;$i<3;$i++) {
for($j=0;$j<3;$j++) {
if($i+$j!=3) {
print quot;i=quot;, $i ,quot;; j=quot;, $j ,quot;nquot;;
}
}
}
Tidak seperti pada bahasa pemrograman lain, switch statement tidak dikenal
dalam script PERL, namun serangkaian statement logika lain dapat
dikombinasikan dalam urutan sebuah blok program. Seperti misalkan statement
logika if dalam blok statement logika while.
Bentuk Umum:
while( )
kondisi ini bernilai true
{
kerjakan statement ini;
if( kondisi ini bernilai true ) {
kerjakan statement ini;
}
}
Contoh:
kombinasi.pl
$a=7;
while($a>0){
$hasil=$a--;
print $hasil ,quot;nquot;;
}
if($a=1) {
print quot;Selesai...nquot;;
}
Blok-blok struktur kendali program dapat dideskripsikan dalam suatu algoritma
pemrograman dengan dua cara, yakni melalui pseudocode, dan blok program.flow-
chart.
Berikut adalah simbol flow-chart berdasar American National Standard Institute (ANSI)
24
25. www.geocities.com/raja_pangalengge/PEd
Gambar Klasifikasi Utama Struktur Kontrol Program pada Bahasa Pemrograman
Contoh:
User harus memasukkan nilai=1 agar keluar dari proses looping (berulang).
cobat.pl
print quot;Jangan masukkan nilai selain bilangan 1: quot;;
$bil=<>;
if($bil!=1) {
do
{
print quot;Ketikkan password: quot;;
$bil=<>;
} while($bil!=1);
print quot;Terima kasih, ya...quot;;
} else {
print quot;Terima kasih, semoga permohonan Anda selama ini terkabulkan...quot;;
}
Kasus Menghitung Nilai Faktorial Bilangan
Misalkan: Hitung 5!
maka, 5! = 5x4x3x2x1 = 120
Harus diperhatikan, bahwa 0! = 1! = 1
Bisa dituliskan script PERL-nya sebagai berikut:
faktorial.pl
25
26. www.geocities.com/raja_pangalengge/PEd
$a=5;
$hasil=1;
if($a==0||$a==1) {
print $a ,quot;! = quot;, $hasil;
} else {
for($i=$a;$i>1;$i--) {
$hasil*=$i;
}
print $a ,quot;! = quot;, $hasil;
}
Bila menggunakan metode user-input, bisa dituliskan sebagai berikut:
5faktorial.pl
print quot;Mencari nilai faktorial bilangan (2 s.d 9)nquot;;
print quot;Ketikkan bilangan?: quot;;
chomp($a=<>);
if($a<0||$a>9) {
print quot;Maaf, di luar range...quot;;
} else {
$hasil=1;
if($a==0||$a==1) {
print $a ,quot;! = quot;, $hasil;
} else {
for($i=$a;$i>1;$i--) {
$hasil*=$i;
}
print $a ,quot;! = quot;, $hasil;
}
}
Karena translator yang digunakan tergolong interpeter, maka range bilangan
dibatasi maksimal sampai dengan 9; kelemahan interpeter pada pengerjaan
bilangan dengan hasil rentang bilangan yang lebar, dihindari terjadinya over-flow.
Cara pengerjaan yang lain, bisa juga menggunakan Algoritma Mangabing
sebagai berikut:
5! tak lain bisa disebutkan:
pengerjaan ke-1: 5-0 x …
pengerjaan ke-2: 5-1 x …
pengerjaan ke-3: 5-2 x …
pengerjaan ke-4: 5-3 x …
pengerjaan ke-5: 5-4 x …
⇒ kesimpulan: ada 5 kali perulangan untuk mengerjakan perhitungan 5!
Script PERL-nya bisa dituliskan sebagai berikut:
faktorial1.pl
$a=5;
$hasil=1;
if($a==0||$a==1) {
print $a ,quot;! = quot;, $hasil;
} else {
for($i=0;$i<$a;$i++) {
$hasil*=($a-$i);
}
print $a ,quot;! = quot;, $hasil;
}
26
27. www.geocities.com/raja_pangalengge/PEd
Algoritma
Bila menggunakan metode dengan menggunakan
user-input
Mangabing:
5faktorial1.pl
print quot;Mencari nilai faktorial bilangan (2 s.d 9)nquot;;
print quot;Ketikkan bilangan?: quot;;
chomp($a=<>);
if($a<0||$a>9) {
print quot;Maaf, di luar range...quot;;
} else {
$hasil=1;
if($a==0||$a==1) {
print $a ,quot;! = quot;, $hasil;
} else {
for($i=0;$i<$a;$i++) {
$hasil*=($a-$i);
}
print $a ,quot;! = quot;, $hasil;
}
}
Logical Value
Nilai logika atau bisa juga disebut boolean dinyatakan true atau false. Bila
sebuah ekspresi memberi nilai kebenaran (ya), maka bernilai true, sebaliknya
jika sebuah ekspresi memberi nilai kesalahan (tidak), maka bernilai false. Tidak
seperti pada Bahasa C/C++, BASIC, JavaScript atau yang lain, script PERL
dalam menyatakan Logical Value (Boolean) bisa merepresentasikan dengan nilai
true dan false, justru tidak dapat merepresentasikannya dalam nilai 0 atau 1.
ttanya.pl
print quot;Masukkan nilai >= 7: quot;;
$tanya = <>;
if($tanya<7) {
print quot;Maaf, nilai harus >= 7.quot;;
} else {
print quot;Nilai yang Anda isikan benar.quot;;
}
Ekspresi quot;Maaf, nilai harus >= 7.quot;, akan bernilai true jika variabel tanya
diisikan >= 7, sebaliknya jika variabel tanya diisikan <7, maka ekspresi bernilai
false dan menampilkan quot;Nilai yang Anda isikan benar.quot;.
Lebih jelasnya dapat terlihat pada contoh berikut:
kas30.pl
print quot;Operand-1 harus lebih besar dari Operand-2nquot;;
print quot;Operand-1?: quot;;
$op1=<>;
print quot;Operand-2?: quot;;
$op2=<>;
if($op1>$op2) {
print quot;Nilai : true.quot;;
} else {
print quot;Nilai : false.quot;;
}
27
28. www.geocities.com/raja_pangalengge/PEd
Operasi Larik (Array)
Larik (array) adalah sejumlah data yang bertipe sama, dimana masing-masing
elemen diurutkan mulai indeks ke-0. Dalam script PERL, nama variabel sebuah larik
dituliskan dengan prefix:’@’.
Misalkan: @string=(’b’,’e’,’r’,’t’,’e’,’p’,’u’,’k’);
Adalah sebuah larik dengan nama string dengan tipe data char (karakter),
berjumlah 8 elemen (umumnya disebut dengan, panjang larik=8), diuraikan sebagai
berikut:
$string[0]=’b’;
$string[1]=’e’;
$string[2]=’r’;
$string[3]=’t’;
$string[4]=’e’;
$string[5]=’p’;
$string[6]=’u’;
$string[7]=’k’;
larik01.pl
@string=('b','e','r','t','e','p','u','k');
for($i=0;$i<8;$i++) {
print quot;string[quot;, $i ,quot;]: quot;, $string[$i];
print quot;nquot;;
}
larik02.pl
$string[0]='b';
$string[1]='e';
$string[2]='r';
$string[3]='t';
$string[4]='e';
$string[5]='p';
$string[6]='u';
$string[7]='k';
for($i=0;$i<8;$i++) {
print quot;string[quot;, $i ,quot;]: quot;, $string[$i];
print quot;nquot;;
}
Elemen larik dapat terdiri dari tipe data karakter/string, dan bilangan (numerik).
Misalkan:
Tipe Data Karakter:
1kara.pl
@huruf=('7','a','c','s','H','A',']');
print quot;Isi elemen-elemen larik huruf = quot;, @huruf ,quot;nquot;;
print quot;Elemen dimulai dari indeks ke-0 = quot;, $huruf[0];
Tipe Data String:
1kata.pl
@kata=(quot;7aquot;,quot;satoequot;,quot;[-5c]quot;,quot;Sabrinaquot;,quot;Hquot;,quot;Aaquot;);
print quot;Isi elemen-elemen larik kata = quot;, @kata ,quot;nquot;;
print quot;Elemen dimulai dari indeks ke-0, isi elemen ke-3 = quot;, $kata[2];
28
29. www.geocities.com/raja_pangalengge/PEd
Tipe Data Numerik:
1bilangan.pl
@bil=(7,56,-5,-11.2,90,0.6);
print quot;Isi elemen-elemen larik bil = quot;, @bil ,quot;nquot;;
print quot;Elemen dimulai dari indeks ke-0, isi elemen ke-4 = quot;, $bil[3];
Algoritma Marbulang P7
Diuraikan sebagai berikut:
char[i+7] ; i=0
jika char[0] ← char[7], maka selanjutnya char[i+1]
jika diimplementasikan pada kata berikut ini:
Nahumdimana
menghasilkan kata baru berikut ini:
manaNahumdi
Berikut diimplementasikan dengan script PERL:
marbulangp7.pl
@Kara=('N','a','h','u','m','d','i','m','a','n','a');
$N=@Kara;
$j=7;
print quot;Kata yang akan dimanipulasi: quot;;
for($i=0;$i<$N;$i++) {
print $Kara[$i] , quot; quot;;
}
print quot;nquot;;
print quot;Dimanipulasi dengan Algoritma Marbulang P7:quot;;
print quot;nquot;;
print $Kara[$j];
for($i=0;$i<$N;$i++) {
$j=$j+1;
if($j>=$N && $j<($N+7)) {
print $Kara[$j-$N];
} else {
print $Kara[$j];
}
}
Kasus: Menampilkan setiap karakter yang telah dimasukkan oleh user, namun
dengan syarat panjang karakter dibatasi dengan terlebih dahulu ditetapkan oleh
user.
Misalkan, kata yang dimasukkan: ‘hai’.
inputlarik.pl
print quot;Panjang kata yang diinginkan?: quot;;
$N=<>;
@kata;
for($i<0;$i<$N;$i++) {
print quot;Karakter ke-quot;, $i+1 ,quot;: quot;;
$kata[$i]=<>;
}
print quot;nquot;;
print quot;Kata yang Anda ketikkan: nquot;;
for($i=0;$i<$N;$i++) {
print $kata[$i];
29
30. www.geocities.com/raja_pangalengge/PEd
}
print quot;Selesai...quot;;
MATRIKS
Penggunaan larik banyak dimanfaatkan untuk operasi matriks. Yang dimaksud
dengan matriks adalah sejumlah data ber-tipe numerik yang menempati posisi baris
dan kolom yang disebut elemen dengan formulasi Amxn; dimana m=baris dan
n=kolom. Indeks dimulai dengan 1.
Misalkan: sebuah matriks A dengan ukuran 2x3 berisi elemen masing-masing:
A[1][1] = -2
A[1][2] = 2
A[1][3] = 1
A[2][1] = 3
A[2][2] = -1
A[2][3] = 5
Selengkapnya matriks A dituliskan sebagai berikut:
− 2 2 1
A2 x 3 =
3 − 1 5
Dalam script PERL dituliskan sebagai berikut:
matriks.pl
$A[0][0]=-2;
$A[0][1]=2;
$A[0][2]=1;
$A[1][0]=3;
$A[1][1]=-1;
$A[1][2]=5;
for($i=0;$i<2;$i++) {
for($j=0;$j<3;$j++) {
print quot;A[quot;, $i+1 ,quot;][quot;, $j+1 ,quot;]=quot;, $A[$i][$j];
print quot;nquot;;
}
}
Tampilan jalannya script matriks.pl:
30
32. www.geocities.com/raja_pangalengge/PEd
Script matrik.pl bisa juga dituliskan kembali sebagai berikut, dimana hasil
perkalian matriks A dengan konstanta 5 disimpankan ke matriks C:
matrik1a.pl
$A[0][0]=-2;
$A[0][1]=2;
$A[0][2]=1;
$A[1][0]=3;
$A[1][1]=-1;
$A[1][2]=5;
@C;
for($i=0;$i<2;$i++) {
for($j=0;$j<3;$j++) {
print quot;A[quot;, $i+1 ,quot;][quot;, $j+1 ,quot;]=quot;, $A[$i][$j];
print quot;nquot;;
}
}
print quot;nquot;;
print quot;[C]=[A] x 5, hasilnya = nquot;;
for($i=0;$i<2;$i++) {
for($j=0;$j<3;$j++) {
$C=$A[$i][$j]*5;
print quot;C[quot;, $i+1 ,quot;][quot;, $j+1 ,quot;]=quot;, $C;
print quot;nquot;;
}
}
Kelemahan interpreter dibandingkan dengan compiler adalah terletak pada eksekusi
dan storing data serta hasil eksekusi sekaligus dilakukan di RAM (Random Access
Memory), sehingga saat program telah selesai dilaksanakan, maka saat itu juga
seluruh data hasil eksekusi langsung dihapus dari RAM.
Inilah yang menyebabkan pada script matrik1.pl, isi matriks C (perhatikan bagian
yang ditunjuk anak panah) bernilai 25, karena hanya merekam nilai hasil eksekusi
yang terakhir (A[2][3] x 5).
matrik1.pl
$A[0][0]=-2;
$A[0][1]=2;
$A[0][2]=1;
$A[1][0]=3;
$A[1][1]=-1;
$A[1][2]=5;
@C;
for($i=0;$i<2;$i++) {
for($j=0;$j<3;$j++) {
print quot;A[quot;, $i+1 ,quot;][quot;, $j+1 ,quot;]=quot;, $A[$i][$j];
print quot;nquot;;
}
}
print quot;nquot;;
print quot;[C]=[A] x 5, hasilnya = nquot;;
for($i=0;$i<2;$i++) {
for($j=0;$j<3;$j++) {
$C=$A[$i][$j]*5;
print quot;C[quot;, $i+1 ,quot;][quot;, $j+1 ,quot;]=quot;, $C;
print quot;nquot;;
}
32
34. www.geocities.com/raja_pangalengge/PEd
for($i=0;$i<2;$i++) {
for($j=0;$j<3;$j++) {
print quot;A[quot;, $i+1 ,quot;][quot;, $j+1 ,quot;]=quot;, $A[$i][$j];
print quot;nquot;;
}
}
print quot;nMatriks B:nquot;;
for($j=0;$j<2;$j++) {
for($k=0;$k<3;$k++) {
print quot;B[quot;, $j+1 ,quot;][quot;, $k+1 ,quot;]=quot;, $B[$j][$k];
print quot;nquot;;
}
}
print quot;nquot;;
print quot;[A] - [B], hasilnya: nquot;;
for($i=0;$i<2;$i++) {
for($k=0;$k<3;$k++) {
print quot;C[quot;, $i+1 ,quot;][quot;, $k+1 ,quot;]=quot;, $A[$i][$k]-$B[$i][$k];
print quot;nquot;;
}
}
Tampilan jalannya script matrikab.pl:
Mengurutkan elemen larik: Mini-Maks (dari kecil ke besar)
Misalkan sebuah larik data dengan isi elemennya sebagai berikut:
data = (98,5,12,-4,0,-22,3,-7);
Maka diurutkan dari kecil ke besar sebagai berikut:
data = (-22,-7,-4,0,3,5,12,98);
Script-nya sebagai berikut:
min2mkas.pl
@data = (98,5,12,-4,0,-22,3,-7);
print quot;Larik data awal:nquot;;
for($i=0;$i<8;$i++) {
print $data[$i] ,quot; quot;;
}
for($i=0;$i<8;$i++) {
34
35. www.geocities.com/raja_pangalengge/PEd
for($j=0;$j<8-$i-1;$j++) {
if($data[$j]>$data[$j+1]) {
$temp=$data[$j];
$data[$j]=$data[$j+1];
$data[$j+1]=$temp;
}
}
}
print quot;nSetelah diurutkan dari kecil ke besar:nquot;;
for($i=0;$i<8;$i++) {
print $data[$i] ,quot; quot;;
}
Tampilan jalannya script min2maks.pl:
Contoh lain:
min2max.pl
@urut=(900,76,-5,45,-666,3);
print quot;Diurutkan dari terkecil ke terbesar: quot;;
for($i=0;$i<6;$i++) {
for($j=0;$j<6-$i-1;$j++) {
if($urut[$j]>$urut[$j+1]) {
$temp=$urut[$j];
$urut[$j]=$urut[$j+1];
$urut[$j+1]=$temp;
}
}
}
for($i=0;$i<6;$i++) {
print $urut[$i] ,quot; quot;;
}
Contoh:
Sejumlah data dengan panjang 7, ber-tipe numerik, dimasukkan oleh user secara
acak; selanjutnya akan diurutkan dari terbesar sampai dengan terkecil.
Misalkan:
35
37. www.geocities.com/raja_pangalengge/PEd
Tampilan jalannya script max2min1.pl:
Manipulasi String terhadap Larik
Mengurutkan karakter pada sebuah string
Misalkan ada sebuah string:”Sebentar lagi kedatangan Raja Mangabing akan
disambut di kota Chicago” dimana disimpankan ke larik bernama larik.
Selanjutnya akan diurutkan setiap kata berdasar urutan kode ASCII 8bit-
nya terhadap karakter pertama kata tersebut.
Hasilnya setelah diurutkan:
Chicago Mangabing Raja Sebentar akan di disambut kedatangan kota lagi
sortstr.pl
@larik=qw(Sebentar kedatangan Raja Mangabing akan disambut di kota Chicago);
@larik = sort(@larik);
print quot;@larikquot;;
Dari hasil jalannya script sortstr.pl, dapat disimpulkan bahwa level huruf
besar di bawah dari level huruf kecil (berdasar kode desimal ASCII-nya).
Analogi dengan kasus sortstr.pl, namun setiap kata terlebih dahulu diubah ke
huruf kecil lalu diurutkan; seperti berikut ini:
akan chicago di disambut kedatangan kota mangabing raja sebentar
sortstr1.pl
@larik=qw(Sebentar kedatangan Raja Mangabing akan disambut di kota Chicago);
foreach $ini (@larik) {
push(@coba,quot;L$iniquot;);
}
@coba = sort(@coba);
print quot;@cobaquot;;
Mengubah bentuk string ke larik
Contoh:
37
38. www.geocities.com/raja_pangalengge/PEd
kalimat=quot;Segera-saksikan-siaran langsung basket di stasiun Sagoeman
TV.quot;;
str2larik1.pl
$kalimat=quot;Segera-saksikan-siaran langsung basket di stasiun Sagoeman TV.quot;;
@larik = split('-',$kalimat);
print quot;@larikquot;;
Pada string yang diisikan ke variabel kalimat, yang dihilangkan antar kata
agar diubah ke bentuk larik adalah karakter: ‘–’.
Contoh:
nama=quot;Tessi,Sentot Kho,Jaka Haryatno,Buchori,Zebulon,Renee,Indriquot;;
str2larik.pl
$nama=quot;Tessi,Sentot Kho,Jaka Haryatno,Buchori,Zebulon,Renee,Indriquot;;
@larik = split(',',$nama);
print quot;@larikquot;;
Pada string yang diisikan ke variabel nama, yang dihilangkan antar kata agar
diubah ke bentuk larik adalah karakter: ‘,’.
Mengubah bentuk larik ke string
Contoh:
larik=(quot;Segeraquot;,quot;saksikanquot;,quot;siaranquot;,quot;langsungquot;,quot;basketquot;,quot;diquot;,quot;stasiunquot;,quot;Sagoemanquot;,quot;
TVquot;,quot;.quot;);
larik2str.pl
@larik=(quot;Segeraquot;,quot;saksikanquot;,quot;siaranquot;,quot;langsungquot;,quot;basketquot;,quot;diquot;,quot;stasiunquot;,quot;Sagoemanquot;
,quot;TVquot;,quot;.quot;);
$kata = join(',',@larik);
print quot;$kataquot;;
Teknik PUSH dan POP pada elemen larik
Misalkan: sejumlah nama siswa/i dimasukkan ke dalam larik Data, sebagai
berikut:
Data = (”Mulyani”,”Boedyotto”,”Rahma”,”Tina”);
Untuk mendapatkan jumlah elemen larik Data digunakan fungsi:
scalar(@Data);
Seperti ditunjukkan script berikut:
pjglarik.pl
@Data=(quot;Mulyaniquot;,quot;Boedyottoquot;,quot;Rahmaquot;,quot;Tinaquot;);
$N=scalar(@Data);
print quot;Larik Data: quot;;
for($i=0;$i<$N;$i++) {
print $Data[$i] ,quot; quot;;
}
print quot;nPanjang larik Data = quot;, $N;
Jika ingin dimasukkan elemen baru ke larik Data bernilai ‘Nahason’, maka akan
ditambahkan ke setelah elemen terakhir; yakni setelah elemen ke-3, elemen
baru menempati posisi indeks ke-4 (larik dimulai indeks ke-0).
Hasilnya sebagai berikut:
Data = (‘”Mulyani”,”Boedyotto”,”Rahma”,”Tina”,”Nahason”);
38
39. www.geocities.com/raja_pangalengge/PEd
push1.pl
@Data=(quot;Mulyaniquot;,quot;Boedyottoquot;,quot;Rahmaquot;,quot;Tinaquot;);
$N=scalar(@Data);
print quot;Larik Data: quot;;
for($i=0;$i<$N;$i++) {
print $Data[$i] ,quot; quot;;
}
push(@Data, quot;Nahasonquot;);
print quot;nLarik Data yang baru: quot;, quot;@Dataquot;;
Baris kode ini:
print quot;nLarik Data yang baru: quot;, quot;@Dataquot;;
dapat juga dituliskan begini:
print quot;nLarik Data yang baru: @Dataquot;;
Menambah sekaligus dua elemen baru:
push2.pl
@Data=(quot;Mulyaniquot;,quot;Boedyottoquot;,quot;Rahmaquot;,quot;Tinaquot;);
$N=scalar(@Data);
print quot;Larik Data: quot;;
for($i=0;$i<$N;$i++) {
print $Data[$i] ,quot; quot;;
}
push(@Data, quot;Nahasonquot;,quot;Moniqequot;);
print quot;nLarik Data yang baru: quot;, quot;@Dataquot;;
Menambah elemen baru di awal elemen larik:
shift1.pl
@Data=(quot;Mulyaniquot;,quot;Boedyottoquot;,quot;Rahmaquot;,quot;Tinaquot;);
$N=scalar(@Data);
print quot;Larik Data: quot;;
for($i=0;$i<$N;$i++) {
print $Data[$i] ,quot; quot;;
}
unshift(@Data, quot;Sentotquot;);
print quot;nLarik Data yang baru: quot;, quot;@Dataquot;;
Menambah sekaligus dua elemen baru di awal elemen larik:
shift2.pl
@Data=(quot;Mulyaniquot;,quot;Boedyottoquot;,quot;Rahmaquot;,quot;Tinaquot;);
$N=scalar(@Data);
print quot;Larik Data: quot;;
for($i=0;$i<$N;$i++) {
print $Data[$i] ,quot; quot;;
}
unshift(@Data, quot;Sentotquot;,quot;Latiefquot;);
print quot;nLarik Data yang baru: quot;, quot;@Dataquot;;
Menampilkan isi larik Data dapat juga digunakan script berikut:
@Data=(quot;Mulyaniquot;,quot;Boedyottoquot;,quot;Rahmaquot;,quot;Tinaquot;);
$A=quot;@Dataquot;;
print quot;nquot;, $A;
Mengetahui panjang larik Data dapat juga digunakan script berikut:
@Data=(quot;Mulyaniquot;,quot;Boedyottoquot;,quot;Rahmaquot;,quot;Tinaquot;);
39
40. www.geocities.com/raja_pangalengge/PEd
$aa=@Data;
print quot;nquot;, $aa;
Contoh: larik siswa berisi elemen-elemen sebagai berikut:
siswa = (”Moniqe”,”Lue”,”Rose”,”Tina”,”Nahason”,”Mulyani”);
Jika elemen ‘Mulyani’ ingin dihapus, maka digunakan script berikut:
pop1.pl
@siswa=(quot;Moniqequot;,quot;Luequot;,quot;Rosequot;,quot;Tinaquot;,quot;Nahasonquot;,quot;Mulyaniquot;);
$N=scalar(@siswa);
print quot;Larik siswa: quot;;
for($i=0;$i<$N;$i++) {
print $siswa[$i] ,quot; quot;;
}
pop(@siswa);
print quot;nLarik siswa yang baru: quot;, quot;@siswaquot;;
Menghapus sekaligus dua elemen di akhir larik:
pop2.pl
@siswa=(quot;Moniqequot;,quot;Luequot;,quot;Rosequot;,quot;Tinaquot;,quot;Nahasonquot;,quot;Mulyaniquot;);
$N=scalar(@siswa);
print quot;Larik siswa: quot;;
for($i=0;$i<$N;$i++) {
print $siswa[$i] ,quot; quot;;
}
pop(@siswa);
print quot;nLarik siswa yang baru: quot;, quot;@siswaquot;;
pop(@siswa);
print quot;nLarik siswa yang baru lagi: quot;, quot;@siswaquot;;
Menghapus elemen di awal larik:
shift1.pl
@siswa=(quot;Moniqequot;,quot;Luequot;,quot;Rosequot;,quot;Tinaquot;,quot;Nahasonquot;,quot;Mulyaniquot;);
$N=scalar(@siswa);
print quot;Larik siswa: quot;;
for($i=0;$i<$N;$i++) {
print $siswa[$i] ,quot; quot;;
}
shift(@siswa);
print quot;nLarik siswa yang baru: quot;, quot;@siswaquot;;
Menghapus sekaligus dua elemen di awal larik:
shift2.pl
@siswa=(quot;Moniqequot;,quot;Luequot;,quot;Rosequot;,quot;Tinaquot;,quot;Nahasonquot;,quot;Mulyaniquot;);
$N=scalar(@siswa);
print quot;Larik siswa: quot;;
for($i=0;$i<$N;$i++) {
print $siswa[$i] ,quot; quot;;
}
shift(@siswa);
print quot;nLarik siswa yang baru: quot;, quot;@siswaquot;;
shift(@siswa);
print quot;nLarik siswa yang baru lagi: quot;, quot;@siswaquot;;
40
41. www.geocities.com/raja_pangalengge/PEd
Tabel Fungsi Larik:
Function Definisi
push(@array, element) menambahkan ke akhir @array
pop(@array) menghapus elemen terakhir dari @array
unshift(@array, element) menambahkan ke awal @array
shift(@array) menghapus elemen pertama dari @array
delete $array[index] menghapus elemen berdasar indeks
Contoh:
Mencari mean dan modus dari 7 kali pemasukan bilangan oleh user:
meanmodus.pl
@bil;
print quot;Pemasukan bilangan sebanyak 7 kalinquot;;
for($i=0;$i<7;$i++) {
print quot;Data[quot;, $i+1 ,quot;]: quot;;
chomp($bil[$i]=<>);
}
$tot=0;
for($i=0;$i<7;$i++) {
$tot+=$bil[$i];
}
$mean=$tot/7;
print quot;Rata-rata = quot;, $mean;
print quot;nquot;;
print quot;Data diurutkan dari kecil ke besar: quot;;
for($i=0;$i<7;$i++) {
for($j=0;$j<7-$i-1;$j++) {
if($bil[$j]>$bil[$j+1]) {
$temp=$bil[$j];
$bil[$j]=$bil[$j+1];
$bil[$j+1]=$temp;
}
}
}
print quot;@bilquot;;
$hasil=0;
for($j=0;$j<7;$j++) {
if($bil[$j]==$bil[$j+1]) {
$hasil+=1;
}
}
print quot;nModus sebanyak quot;, $hasil+1;
Terlihat pada blok script meanmodus.pl, pencarian banyaknya modus bilangan
dilakukan setelah bilangan-bilangan tersebut diurutkan terlebih dahulu; dengan
demikian pencarian banyak modus dapat dilakukan dengan mudah.
Selain modus, juga dicari nilai rata-tara bilangan tersebut (mean), dengan cara
setiap bilangan ditambahkan ke sebuah variabel penampung, $hasil, yang di-
reset=0. sehingga tanpa bilangan-bilangan itu pun diurutkan terlebih dahulu, nilai
mean dapat dicari karena tujuannya hanyalah pencacahan.
Pencacahan adalah penjumlahan secara berulang-ulang sebanyak sekian kali
untuk mendapatkan total akhir jumlah bilangan (disebut juga dengan counter).
41
42. www.geocities.com/raja_pangalengge/PEd
Tampilan jalannya script meanmodus.pl:
Kelemahan script meanmodus.pl ini adalah belum dapat menentukan nilai modus -
nya, hanya banyaknya modus yang muncul; untuk itu alternatif lain, dapat dituliskan
sebagai berikut:
meanmodus1.pl
@bil;
print quot;Pemasukan bilangan sebanyak 7 kalinquot;;
for($i=0;$i<7;$i++) {
print quot;Data[quot;, $i+1 ,quot;]: quot;;
chomp($bil[$i]=<>);
}
$tot=0;
for($i=0;$i<7;$i++) {
$tot+=$bil[$i];
}
$mean=$tot/7;
print quot;Rata-rata = quot;, $mean;
print quot;nquot;;
print quot;Data diurutkan dari kecil ke besar: quot;;
for($i=0;$i<7;$i++) {
for($j=0;$j<7-$i-1;$j++) {
if($bil[$j]>$bil[$j+1]) {
$temp=$bil[$j];
$bil[$j]=$bil[$j+1];
$bil[$j+1]=$temp;
}
}
}
print quot;@bilquot;;
$hasil=0;
for($i=0;$i<7;$i++) {
$ref=$bil[$i];
if($bil[$i]==$bil[$i+1]) {
$hasil+=1;
}
for($j=0;$j<7-$i-1;$j++) {
if($bil[$j]==$ref) {
$x=$ref;
}
42
43. www.geocities.com/raja_pangalengge/PEd
}
}
print quot;nModus=quot;, $x ,quot; sebanyak quot;, $hasil+1;
Terlihat pada script meanmodus1.pl, untuk mendapatkan nilai modus digunakan
variabel ref sebagai penampung sementara terhadap nilai pada blok looping
pertama ($i) ke blok looping ke-2 ($j) jika ditemukan bilangan yang sama.
Tampilan jalannya script meanmodus1.pl:
• Menampilkan Tabel Perkalian 1 s.d 10
Untuk mendapatkan tabel ini cukup digunakan statement logika perulangan
for..i, sebagai berikut:
kali110.pl
print quot;Tabel Perkalian dari 1 s.d 10:nquot;;
for($i=1;$i<=10;$i++) {
for($j=1;$j<=10;$j++) {
print $i ,quot;*quot;, $j ,quot;=quot;, $i*$j;
print quot;tquot;;
}
print quot;nquot;;
}
Tampilan jalannya script kali110.pl:
43
44. www.geocities.com/raja_pangalengge/PEd
Penggunaan Fungsi (Function)
Function (fungsi) dalam sebuah bahasa pemrograman dapat didefinisikan sebagai
suatu blok program yang berisi suatu kode untuk mengerjakan suatu bagian lain
dalam program itu sendiri.
Seperti halnya dengan sebuah fungsi matematika yang dikenal dalam aljabar
matematika dasar yang dimaksudkan untuk merepresentasikan sebuah pengerjaan
terhadap serangkaian operasi matematika.
Misalkan:
Dalam matematika dasar diketahui sejumlah rangkaian pengerjaan sebagai berikut:
(2).3 + 5 = 11
(0.5).3 + 5 = 6.5
(-2).3 + 5 = -1
(10).3 + 5 = 35
maka, dapat dibangun sebuah fungsi matematika untuk mengerjakan instruksi
tersebut yakni sebuah fungsi regresi linier: 3x + 5 ; dimana x = {Bilangan Real},
atau
dapat ditulikan kebali fungsi ini menjadi: y = f(x) = 3x + 5
Kasus ini dapat dituliskan dalam script PERL sebagai berikut:
fungsi1.pl
$x=2;
print quot;x = quot;, $x , quot;nquot;;
$hasil=itung($x);
sub itung
{
$y=3*$x+5;
print quot;Hasil = quot;, $y;
exit;
}
Fungsi juga dapat digunakan untuk menampilkan pesan ke layar, seperti berikut ini:
fpesan.pl
$jawab=1;
if($jawab==1) {
tampilkan1();
} else {
tampilkan2();
}
sub tampilkan2()
{
print quot;Oke, semoga sukses...quot;;
exit;
}
sub tampilkan1()
{
print quot;Selamat Datang di kota Bandung.quot;;
exit;
}
Contoh:
Menampilkan nilai f(x)=3x+5 untuk rentang x=1 s.d x=7.
fungsi2.pl
print quot;xt3x+5nquot;;
44
45. www.geocities.com/raja_pangalengge/PEd
print quot;=============nquot;;
for($x=1;$x<=7;$x++) {
print $x ,quot;tquot;, itung($x), quot;nquot;;
}
sub itung
{
$y=3*$x+5;
}
Analog pada script fungsi2.pl, namun menggunakan metode user-input:
1fungsi12.pl
print quot;Batas Bawah: quot;;
chomp($bawah=<>);
print quot;Batas Atas: quot;;
chomp($atas=<>);
print quot;xt3x+5nquot;;
print quot;=============nquot;;
for($x=$bawah;$x<=$atas;$x++) {
print $x ,quot;tquot;, itung($x), quot;nquot;;
}
sub itung
{
$y=3*$x+5;
}
Contoh:
Selesai kasus ini,
f(x,y) = 3x+5y;
dimana x=y, untuk x=-2 s.d x=3.
Solusi:
1fungsi3.pl
print quot;Batas Bawah: quot;;
chomp($bawah=<>);
print quot;Batas Atas: quot;;
chomp($atas=<>);
print quot;xtyt3x+5ynquot;;
print quot;=========================nquot;;
for($x=$bawah;$x<=$atas;$x++) {
$y=$x;
print $x ,quot;tquot;, $y ,quot;tquot;, itung($x,$y), quot;nquot;;
}
sub itung
{
$z=3*$x+5*$y;
}
Contoh:
45