Tutorial Perl Promrograman ( Mengenal Variabel Lingkungan )

[postlink]http://eriirawan78.blogspot.com/2014/06/tutorial-perl-promrograman-mengenal.html[/postlink]

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">
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:
Top of Form
Nama :
e-mail :
kirim
Bottom of Form
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:
  1. antara setiap variabel dipisahkan dengan ampersand (&)
  2. 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.
Top of Form
Nama :
e-mail :
kirim
Bottom of Form

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