5. Perl’e Giriş
Geçen Hafta... UNIX Linux Temel Komutlar Çekirdek kavramı Dosya erişim hakları Web’te dosya yayınlama
Bu Hafta... CGI-Bin Perl Nedir? Nasıl Çalışır? Yorumlayıcı vs. Derleyici Neden Perl? Perl’e Giriş
Kaynaklar Chapter 1: Introduction Chapter 1: Introduction to Perl R. L. Schwartz, T. Phoenix Third Edition, July 2001. Chapter 1: Introduction to Perl N. Patwardhan, E. Siever, S. Spainhour Second Edition, June 2002. Chapter 1: Getting Started S. Guelich, S. Gundavaram, G. Birznieks Second Edition, July 2000
5.1.1 CGI Nedir? CGI (Common Gateway Interface-Ortak Geçis Arayüzü) Web sunucusunun başka süreçlere (programlara) Web sayfası yaratma ve biçimlendirme imkanını tanımak için ihtiyaç duyduğu en azıdır. Bir istemci Web sunucusundan statik bir kaynak istediğinde, sunucu bunu bulur ve istemciye gönderir. Web sunucusuna bir CGI betik isteği geldiğinde, sunucu bu betiği ayrı bir süreç olarak çalıştırır, bu sürece bir grup girdi girer, çıktıları toplar, ve bu çıktıları bir statik kaynak gibi istemciye gönderir.
5.1.1 CGI Nedir?
5.1.1 CGI Nedir? Çalıştırılacak CGI betiklerinin yerleri ve bu betikleri kimlerin çalıştırabileceği Web sunucunun konfigürasyon dosyasında tanımlanmaktadır. Unix ve Linux işletim sistemlerinde çalıştırılabilir dosyalar diğer dosyalardan erişim hakları tabanında ayrılmaktadır. Dolayısıyla CGI dosyaları dosyanın sahibi, grup üyeleri ve diğerleri tarafından çalıştırılabilir dosyalar olmalıdır. Genelde CGI dosyalarına verilen erişim hakkı 755’tir.
5.1.2 CGI Alternatifleri ASP PHP JSP ColdFusion Java Servlets Bu dillerin geliştirilmesinin sebebi, CGI’ın zayıf noktalarını, örneğin her bir istek için ayrı süreç açma gibi, gidermekti. Ayrıca kod ile HTML arasındaki ayırımı da ikisini birleştirerek sonlanırmaya çalışmaktadırlar. CGI, program yazanların HTTP’yi daha iyi anlamalarını sağladığı ve Web sunucularının tamamına yakınının desteklediği için tüm bu rekabete rağmen hala yaygın olarak tercih edilmektedir.
5.2.1 Perl Nedir? Perl “Practical Extraction and Report Language”’ın baş harflerinden oluşmktadır. Aslında Perl bir kısaltma değil çünkü Larry Wall önce ismi daha sonra da bu ismin açılımını geliştirdi. Bu yüzden Perl kelimesinin tamamı büyük harf değildir. Larry Wall Perl’i 1980’lerin ortalarında çalışmakta olduğu hata rapor sisteminin dosyalama kısmı ile uğraşırken geliştirdi. Larry Wall, var olan araçları kullanmak yerine kendisi bir çözüm geliştirmeye çalıştı ve netice Perl sürüm 0 oldu. "Perl is designed to make the easy jobs easy and the hard jobs possible." - Larry Wall
5.2.1 Perl Nedir? Perl, C, C++ veya assembly gibi daha low-level programlama dilleri ile kabuk programlama gibi daha high-level dilleri arasındaki boşluğu doldurmaya çalışmakta. Low-level programlama yapmak genelde daha zor ve az anlaşılır olmasına rağmen hızlı ve sınırsızdır, yapmak istediğiniz çoğu şeye olanak tanır. High-level programlama ise, yavaş ve kısıtlıdır. Perl kolay, yapabilecekleriniz sınırsıza yakın, genellikle hızlı, ve bir miktar çirkindir (bu yüzden deveye benzetilir).
5.2.2 Neden Perl? Perl high-level diller kategorisindedir. Dolayısıyla Perl kodu daha yoğundur: genelde bir Perl kodu, aynı işlevi gören C kodunun %30 ile %70 kadar uzundur. Bu Perl kodlarının daha hızlı: Yazılabildiği Okunabildiği Hatalardan arıklanabildiği (debug) Bakım sağlanabildiği anlamına gelir. Ayrıca bir programdaki hata oranının kaynak kodun uzunluğu ile doğru orantılı olduğu da düşünülürse, kısa Perl kodları ortalamada daha az hata olarak ta yorumlanabilir.
5.2.3 Platformlar Her ne kadar Perl Unix’te geliştirilmiş ve Unix kültürü ile içiçe geçmiş olsa da Windows ve Macintosh ortamlarında da oldukça yaygınlaşmaktadır. Çoğu Unix ve Linux işletim sisteminde Perl kurulum esnasında otomatik olarak kurulmaktadır ve yaklaşık tamamında kurulum ile birlikte gelmektedir. Windows ve Macintosh’larda her ne kadar Perl otomatik olarak (kurulum ile beraber) gelmiyor olsa da, bu platformlar için de ücretsiz indirilebilen Perl binary dağıtımları (distribution) mevcuttur. Resmi olarak Win32’ler için varolan Perl dağıtımı ActivePerl’dir (5.8.6.811) ve ActiveState şirketi tarafından geliştirilmektedir (www.activestate.com).
5.2.4 Perl Programlama Perl programları metin dosyalarıdır, dolayısıyla onları kendi tercih ettiğiniz metin editörü ile oluşturabilir ve düzenleyebilirsiniz. Linux ortamında kullanabileceğiniz ve bu ders kapsamında tavsiye edilen editörlerden biri Pico. MS Word gibi kelime işlemci kullanmamaya dikkat edin. Eğer bir kelime işlemci kullanmak istiyorsanız mutlaka dosyalarınızı “Save as Text” seçeneği ile kaydedin. Eğer iki bilgisayar arasında dosyalarınızı FTP ile aktaracaksanız ASCII kipini kullanmalısınız (BINARY’yi tercih etmemeye dikkat edin)
5.2.4 Perl Programlama Perl’de yazılan kaynak kodlarını çalıştırmak için diğer programlama dillerinde olduğu gibi derleyici (compiler) bulunmamaktadır. Perl kaynak kodları yorumlayıcı (interpreter) kullanılarak çalıştırılırlar. Basitçe, Perl yorumlayıcı önce tüm ASCII kaynak kodu okur, syntax hataları için kontrol eder, bunu bytecode’a çevirir ve daha sonra Perl’in bytecode motoru bunları çalıştırır (execute). Kaynak kod her çalıştırıldığında bu işlem tekrarlanır.
5.2.5 Yorumlayıcı vs. Derleyici Yorumlayıcı ve derleyici “insanlar tarafından okunabilen” kod satırlarını, “makina tarafından okunabilen” ikili koda (binary code) çevirir. Derleyici kaynak kodu bir defa çevirir: İkili kod bir çok defa farklı ortamlarda farklı kullanıcılar tarafından çalıştırılabilir. İkili kod elde edildikten sonra kullanıcılar kaynak koda ihtiyaç duymaz Yorumlayıcı, kod her çağrıldığında kaynak kodu ikili koda çevirir: Kullanıcılar dolayısıyla her seferinde kaynak koda ve yorumlayıcıya ihtiyaç duymaktadırlar.
5.2.5 Yorumlayıcı vs. Derleyici Temel prensipler: Yürütülür Program (executable) Kaynak kod Derleyici Girdi Yürütülür Program Çıktı Kaynak kod Yorumlayıcı Çıktı Girdi
5.2.5 Yorumlayıcı vs. Derleyici Derleyici avantajları: Ortalama olarak 10 kat daha hızlıdırlar Bağımsız modüllerin çalıştırılmasına olanak tanır Yorumlayıcı avantajları: Kaynak kodlar genellikle çok daha kısadırlar Kodu yazmak ve düzenlemek daha kolaydır Platformlar arası taşınabilirlilik sağlar (kaynak kod makina bağımsızdır)
5.2.5 Yorumlayıcı vs. Derleyici FORTRAN COBOL C C++ Pascal PL/1 Yorumlayıcı: Lisp scheme BASIC Perl Python Smalltalk
5.2.5 Yorumlayıcı vs. Derleyici Yorumlayıcıların en temel dezavantajlarından biri, kod her çalıştırıldığında kaynak kodu çevirmek için harcadıkları zamandır. Fakat Perl yorumlayıcısı çok hızlı ve etkin çalışan bir yorumlayıcı olduğu için bu zaman kaybı minimuma çekilebilmektedir. Yorumlayıcılar ile kolay ve hızlı “prototip” kaynak kod yazma avantajı, Perl’de maksimum seviyelere taşınmıştır.
5.2.6 Neden Perl? Perl’in syntax’ı diğer yaygın olarak kullanılan dillere benzediği için öğrenmek ve Perl’de kod yazmak kolaydır. Oluşan hatalarla ilgili verdiği spesifik ve detaylı hata mesajları bu hataları tespit etmek ve düzeltmek işini kolaylaştırır. Perl yorumlayıcı kullandığı için hızlı kod geliştirmeye olanak tanır; yazdığınız kodu sürekli derlemek zorunda kalmazsınız. Perl kodları kolaylıkla farklı platformlara taşınabilir ve Perl derleyecisi çoğu platform için mevcuttur. Perl dış uygulamalarla kolaylıkla “konuşabilir” – veri alışverişinde bulunabilir.
5.3 Perl Yorumlayıcısına Ulaşmak Perl yorumlayıcısını çalıştırmak için komut satırında sadece Perl demeniz yeterli olacaktır. Eğer Perl çalıştığınız platformda kurulu ve PATH değerleri doğru düzenlenmiş ise, yorumlayıcı devreye girecektir. Linux/Unix sistemlerde Perl’in hangi dizinde bulunduğunu bilmek gerekecektir. Bunun için: umuth@mail:~$ which perl komutunu komut satırından çalıştırın. Gelecek olan cevap: /usr/local/bin/perl şeklinde olacaktır.
5.4.1 Komut Satırından Perl Ctrl^D umuth@mail:~$ perl -e "print \"hello world\n\""; <enter> umuth@mail:~$ perl -e "print 5+3; print \"Hello World\n\""; <enter> umuth@mail:~$ perl $a=5; $b=9; $c=$a*$b; print $c; Ctrl^D
5.4.2 Dosyadan Perl Pico editörünü kullanarak bir dosya yaratın ve içine perl betiklerinizi yazın. Örneğin: #!/usr/local/bin/perl $a=5; $b=9; $c=$a*$b; print “$c\n”; Dosyanızı bir isim ile kaydedin (örneğin deneme.pl). Bu dosyayı çalıştırmak için iki tane alternatifiniz var: umuth@mail:~$ perl deneme.pl <enter> umuth@mail:~$ chmod 7xx deneme.pl <enter> umuth@mail:~$ ./deneme.pl <enter>
5.4.2 Dosyadan Perl Genelde Perl kaynak kodu dosyalarına uzantı verilirken bir isim standardı uygulanmaz, istediğiniz uzantıyı verebilirsiniz. Fakat genel kabul görmüş olan birkaç tane uzantı bulunur ve bunları kullanmanız tavsiye edilmektedir. pl: Perl source code plx: Perl executable (7xx) cgi: CGI olarak çağrılacak Perl dosyası.