[postlink]https://eriirawan78.blogspot.com/2014/06/tutorial-perl-promrograman-mengenal.html[/postlink]
Tutorial Perl:
Ketika
sebuah program CGI dipanggil, maka webserver akan menjalankannya dengan
mengeset variabel lingkungan (environment variable) yang dapat diakses oleh
program CGI tersebut. Variabel lingkungan ini berisi informasi mengenai
lingkungan tempat CGI itu dijalankan, dan juga beberapa informasi mengenai client
yang meminta output program tersebut. Berikut ini saya berikan sebuah contoh
skrip CGI yang akan mencetak semua nilai variabel lingkungan yang ada.
Pasanglah di server Anda, dan lihat hasilnya.
Saya juga sudah menginstall skrip tersebut di langitbiru. Anda bisa mencobanya dengan mengklik http://langitbiru.hypermart.net/demos/env.pl. Jika Anda melihat ini artikel ini secara offline, dan tidak bisa mencoba skripnya, saya berikan sample outputnya di sini (tidak lengkap, hanya bagian yang menarik saja):
QUERY_STRING = nama=Lia+%26+Bob&mail=lb@langitbiru.hypermart.net
jadi ada tambahan lagi, karakter-karakter khusus akan di-encode menurut nilai ascii-nya dalam heksadesimal. Skrip berikut ini akan melakukan pemrosesan sehingga nilai-nilainya dipisahkan dan dikembalikan (di-decode) kebentuk asalnya agar bisa diproses:
Sekarang saya jelaskan bagaimana pemrosesan ini dilakukan. pertama kita ambil input dari variabel lingkungan QUERY_STRING, lalu pisahkan setiap variabel (yang dibatasi oleh &) dengan split. Hasilnya ada di varibel array @data. Lalu untuk setiap pasangan nama dan nilai variabel kita proses lagi dalam loop foreach. Pisahkan nama dari nilai dengan memakai split, lalu isi variabel nilai akan diproses.
Tutorial Perl:
Mengenal Variabel Lingkungan
Ketika
sebuah program CGI dipanggil, maka webserver akan menjalankannya dengan
mengeset variabel lingkungan (environment variable) yang dapat diakses oleh
program CGI tersebut. Variabel lingkungan ini berisi informasi mengenai
lingkungan tempat CGI itu dijalankan, dan juga beberapa informasi mengenai client
yang meminta output program tersebut. Berikut ini saya berikan sebuah contoh
skrip CGI yang akan mencetak semua nilai variabel lingkungan yang ada.
Pasanglah di server Anda, dan lihat hasilnya. #!/usr/local/bin/perl
print "Content-type: text/html\n\n";
foreach $keys (keys %ENV) {
print "$keys = $ENV{$keys}<br>\n"
}Sedikit penjelasan, %ENV adalah array assosiatif yang berisi variabel lingkungan, dan loop foreach $keys (keys %ENV) {...} akan menelusuri setiap isi array tersebut.
Saya juga sudah menginstall skrip tersebut di langitbiru. Anda bisa mencobanya dengan mengklik http://langitbiru.hypermart.net/demos/env.pl. Jika Anda melihat ini artikel ini secara offline, dan tidak bisa mencoba skripnya, saya berikan sample outputnya di sini (tidak lengkap, hanya bagian yang menarik saja):
REMOTE_ADDR = 127.0.0.1
QUERY_STRING =
HTTP_USER_AGENT = Mozilla/4.0 (compatible; MSIE 5.5; Windows 98)
HTTP_CONNECTION = Keep-Alive
SERVER_PORT = 80
HTTP_HOST = langitbiru.hypermart.net
Yang di sebelah kiri tanda sama dengan (=) adalah nama
variabelnya, sedangkan yang disebelah kanan adalah nilainya (isinya). Anda
sudah melihat bahwa dari variabel lingkungan ini Anda bisa tahu broswer apa
yang digunakan (dari HTTP_USER_AGENT) dan alamat IP client (dari REMOTE_ADDR).
Sekarang Anda bisa membuat skrip seperti ini:
#!/usr/local/bin/perl
print "Content-type: text/html\n\n";
print "Browser Anda adalah: $ENV{'HTTP_USER_AGENT'}<br>";
print "IP Anda: $ENV{'REMOTE_ADDR'}<br>";Informasi seperti ini bisa Anda log untuk keperluan tertentu.
Input dengan
metode GET
Input form yang dikirim dengan metode GET akan
dilewatkan sebagai variabel lingkungan QUERY_STRING oleh webserver, jadi
sekalian topik ini dibahas di tutorial bagian kedua ini. Sekarang coba buat
file html dengan body berisi baris-baris seperti ini:
<form method ="get"
actioan="http://langitbiru.hypermart.net/demos/env.pl">
actioan="http://langitbiru.hypermart.net/demos/env.pl">
Nama : <input type="text"
name="nama"><br>
e-mail : <input type="text"
name="mail"<br>
<input type="submit"
value="kirim">
</form>
Yang seharusnya akan tampil seperti ini:
Nama :
e-mail :
e-mail :
kirim
Ketikkan sembarang untuk input nama dan email, lalu
klik 'kirim'. Jika saya masukkan input nama : Yohanes Nugroho dan emailnya
webmaster@langitbiru.hypermart.net, maka nilai query string akan seperti ini:
QUERY_STRING
= nama=Yohanes+Nugroho&mail=webmaster@langitbiru.hypermart.net
Dari sana bisa dilihat bahwa teks dikirim dengan
format seperti ini:
- antara setiap variabel dipisahkan dengan ampersand (&)
- spasi akan diubah menjadi plus (+)
Kalau begitu Anda pasti bertanya, lalu + dan &
dikodekan jadi apa?. Mari kita coba ubah inputnya menjadi, nama adalah Lia
& Bob, email menjadi lb@langitbiru.hypermart.net. Nilai query string akan
seperti ini:
QUERY_STRING = nama=Lia+%26+Bob&mail=lb@langitbiru.hypermart.net
jadi ada tambahan lagi, karakter-karakter khusus akan di-encode menurut nilai ascii-nya dalam heksadesimal. Skrip berikut ini akan melakukan pemrosesan sehingga nilai-nilainya dipisahkan dan dikembalikan (di-decode) kebentuk asalnya agar bisa diproses:
#!/usr/local/bin/perl
print "Content-type: text/plain\n\n";
$input = $ENV{'QUERY_STRING'};
@data = split(/&/, $input);
foreach $datum (@data){
($key,
$nilai)= split (/=/,$datum);
#plus
dijadikan spasi
$nilai =~ tr/+/ /;
#lalu
bil hexanya dipack
$nilai =~
s/%([0-9A-Fa-f][0-9A-Fa-f])/pack("c",hex($1))/ge;
$FORM{$key}=$nilai;
}
foreach $var (keys %FORM){
print
"$var = $FORM{$var}\n";
}
Sekarang hasil keluarannya sudah lebih baik. Anda bisa
mencoba mengetikkan sembarang data dan elihat hasilnya.
Nama :
e-mail :
e-mail :
kirim
Sekarang saya jelaskan bagaimana pemrosesan ini dilakukan. pertama kita ambil input dari variabel lingkungan QUERY_STRING, lalu pisahkan setiap variabel (yang dibatasi oleh &) dengan split. Hasilnya ada di varibel array @data. Lalu untuk setiap pasangan nama dan nilai variabel kita proses lagi dalam loop foreach. Pisahkan nama dari nilai dengan memakai split, lalu isi variabel nilai akan diproses.
$nilai =~ tr/+/ /;
akan mengubah plus menjadi spasi. Lalu untuk mem-pack
bilangan heksanya dilakukan dengan:
$nilai =~
s/%([0-9A-Fa-f][0-9A-Fa-f])/pack("c",hex($1))/ge;
artinya, ubah untaian karakter %
yang diikuti dua bilangan heksa (0-9, A-F) menjadi representasinya dalam
karakter ascii. Selanjutnya nilainya dimasukkan dalam variabel %FORM, untuk
bisa digunakan pada bagian selanjutnya (sebenarnya kalau mau bisa langsung
diproses).
0 komentar:
Posting Komentar