Perl, bir dil bilimci olup NASA'da sistem yöneticisi olarak çalışan Larry Wall tarafından geliştirilmiş bir programlama dilidir. Yoğun şekilde metin işleme ve görüntü tanıma söz konusu olduğunda kullanılabilecek en güçlü ve pratik programlama dilidir. 22 yıldır geliştirilen ve özgür yazılım çerçevesinde kaynak kodu açık olarak sunulan Perl programlama dili hemen hemen tüm işletim sistemlerinde çalışmaktadır.
Larry Wall Perl'i yazarken C, sed, AWK ve sh gibi pek çok dilden önemli ve güçlü özellikler ödünç almıştır.[1] Larry Wall tarafından Perl 6 sürümünin hazırlık çalışmaları devam etmektedir.
İsim
Perl ismi bir kısaltma olmayıp açılımı yoktur. Bu yüzden PERL olarak yazılmaz. Ancak Perl kelimesine karşılık olarak daha sonradan çeşitli açılımlar teklif edilmiştir. Bunların en çok bilinenleri arasında "Practical Extraction and Report Language" (Pratik Çıkarım ve Raporlama Dili) ve Wall tarafından mizahi bir şekilde ortaya atılan "Pathologically Eclectic Rubbish Lister" (Hastalıklı Derecede Eklektik ve Saçma Listeleyici) yer alır. Kısaltma şeklinde yorumlarının kendisinden sonra geldiği bu tip kelimeler için İngilizce'de "backronym" (back geri + acronym kısaltma) terimi kullanılmaktadır.
Modüller
Perl ile ilgili sloganlardan bir tanesi, "Perl programlarının %90'ı zaten yazılmıştır!" sözüdür. Bunun sebebi CPAN yani Comprehensive Perl Archive Network olarak isimlendirilen ve Perl ile ilgili binlerce hazır modülü barındıran sistemdir. Bu madde yazıldığı esnada CPAN bünyesinde 3739 Perl geliştiricisi, 6646 Perl modülü bulunmaktadır. 2421 MB yer kaplayan sistemin 247 yansısı bulunmaktadır. Bunun anlamı şudur: Bir işle ilgili modül, fonksiyon, sistem, vs. büyük bir olasılıkla zaten yazılmıştır, hazır olarak alıp kullanılabilir.
Dış bağlantılar
Perl resmî sayfası
CPAN - Perl Modül Arşivi
Perl Kurumu
Perl hakkında temel kaynakları yayımlayan O'Reilly Media'nın Perl sayfası
************************************************** *
Perl Veri Yapıları,
Operatörler,
Perl Fonksiyonuları,
Özel Değişkenlerden Bazıları,
Alt Programlar,
Modüller,
Perl ve CGI
Peki Perl Nedir?
Practical Extraction and Report Language
Larry Wall Tarafından Geliştirilen bir dildir. Birçok Platformda mevcuttur. Yorumlanarak çalışılan bir dildir. Bir çok başka aracın ve dilin özelliklerini almış ve/veya beraber kullanılabilen bir ortam (AWK, C v.b.) asıl kuvvetini kütüphanelerinden almaktadır. Çok basitten çok karmaşığa kadar kullanım alanı bulunmaktadır.
Perl Veri Yapıları
Değişkenler
$değişkenismi Şeklinde gösterilir.
Sayısal ya da karakter içeriğe sahip olabilirler.
Mantıksal içerik oalrak alındığındna; değişkenin bir değere sahip olması Doğru, Boş (Null) değere sahip olması ise yanlış anlamına gelir.
Kod:
$i = 3;
$yazi = "Bu değişkenin ismi yazi'dir...";
$k = "5";
$flag = "";
Diziler
Kod:
@diziismi Şeklinde tüm dizi,
$diziismi[3] Şeklinde dizinin 3.Elemanını ele alır.
@dizi = ( 1, 2, "text", 7);
print $dizi[0]; # 1 yazar
print $dizi[2]; # text yazar
print $dizi[-1]; # 7 yazar
İlişkiler (Hash)
İndex olarak ve karakter dizilerini kullanan dizilerdir.
Kod:
%hash Şeklinde gösterilir.
%sesi = ( 'köpek', 'havlar', 'kedi', 'miyavlar', 'kuzu' , 'meler');
print $sesi{'kedi'}; # miyavlar yazar
Operatörler
+ , ++, -, --, * , ** ,/ Gibi Aritmetik Operatörleri,
<, >, <=, >=, lt, gt, le, ge, ==, !=, <=>, eq, ne, cmp gibi karşılaştırma için kullanılan operatörler.
&&, ||, not, or, xor Gibi Mantıksal Operatörler,
Karakter Dizileri üzerinde işlem yapan Operatörler
q/STRING/ ---> 'STRING'
qq/STRING/ ---> "STRING"
STRING1.STRING2 ----> STRING1STRING2
Perl Fonksiyonları
Değiken ve Karakter Dizileri Fonksiyonları
index, hex, substr, uc...
ARAMA VE EŞLEŞTİRME FONKSİYONLARI
s///, split.
Sayısal Fonksiyonlar
abs, rand, cos.
Dizi Fonksiyonları
push, shift.
Liste Veri için Fonksiyonlar
reverse, sort.
Eşleşmeler için Fonksiyonlar
each, keys, values.
Girdi Çıktı Fonksiyonları
print, write, read.
Dosya Dizin işlemlerinin Fonksiyonları
chmod, open, rmdir.
Program Akışı ile ilgili Anahtar Kelimeler
goto, exit, next.
Değişken Geçerliliği ile ilgili Anahtar Kelimeler
my, local, import.
Süreçler ile ilgili Fonksiyonlar
fork, waitpid.
Network ve Soket Fonksiyonları
gethostbyname, listen.
Diğer Fonksiyonlar
getlogin, time.
Özel Değişkenlerden Bazıları
Kod:
$ARG, $_, @_
@INC, %INC
%ENV
$ERRNO, $!
Alt Programlar
sub Anahtar Kelimesiyle tanımlanır.
Kod:
sub ISIM;
sub ISIM(PROTO);
sub ISIM BLOCK
sub NAME(PROTO) BLOCK
Prototiplemeye izin verir
Kod:
sub buyukkucuk($$){....}
return Anahtar keilmesiyle değer döndürebilir. Döndürülecek Birden fazla çok değer varsa, bir dizi kullanılarak döndürülebilinir.
my Anahtar kelimeisyle tanımlanan değişkenler sadece o blok boyunca geçerlidir.
Kod:
@_ Dizisi, alt programa gönderilen parametreleri içerir.
sub buyuk($$){
my $birinci = $_[0];
my $ikinci = $_[1];
if (birinci gt $ikinci) {
return $birinci;
}
elsif{
return $ikinci;
}
}
Alt Programlar Eğer modüllerden çağırılacaksa, mutlaka yerel değişken tanımlamaları yapılmalıdır.
Modüller
Alt Programların toplandığı kitaplıklardır.
CPAN Arşivinden geniş bir kitaplık desteği alınabilir.
Kod:
package SEMINER:rnek;
# SEMINER/ornek.pm dosyası
use Exporter ();
use vars qw($VERSION @ISA @ExpORT @ExpORT_OK %EXPORT_TAGS);
$VERSION = 0.1;
@ISA = qw(Exporter); @ExpORT = qw( &sub1 &sub2 &sub3);
%EXPORT_TAGS = ( ); @ExpORT_OK = qw($degisken1);
use vars @ExpORT_OK;
sub sub1{
.
.
.
}
sub sub2{
.
.
.
}
sub sub3{
.
.
.
}
sub sub4{
.
.
.
}
1;
__END__
Ana program
Kod:
use SEMINER:rnek;
sub1();
Perl ve CGI
Hazır CGI kitaplığı ile Form ve dinamik Web Sayfası hazırlama kolaylığı,
Web Tarayıcısı değişkenlerine kolay erişim,
Veritabanı arayüzleri sayesinde, Web otomasyon projelerinde kullanım.
CGI ile Neler Yapabiliriz?
CGI dosyaları az önce de belirttiğim gibi server'a bir takım komutlar verip "iş" yaptıran progr*****lardır. CGI dosyalarıyla web sitenizin ziyaretcilerle etkileşimini sağlayabilirsiniz. Onların görüşlerini ve önerilerini öğrenebilirsiniz. Bir takım bilgiler alıp dosyalara kaydettirebilir, daha sonra bu dosyaları inceleyip ziyaretcilerinizin görüşlerini öğrenebilirsiniz. Anket programlarıyla insanların istediğiniz konu hakkında düşüncelerini ve oranları öğrenebilirsiniz. Ziyaretci defteri hazırlayıp ziyaretcilerinizin görüşlerini alabilirsiniz. Forum programlarıyla insanların bilgilerini paylaşabilecekleri ortamlar hazırlayabilirsiniz. Mail formlarla ziyaretcileriniz web üzerinden size e-mail gönderebilmelerini sağlayabilirsiniz. Bunun dışında Toplist, mesaj tahtası vs. gibi programlarla hem web sitenize içerik katarsınız, hem de ziyaretci sayınızı arttırabilirsiniz.
Perl ile sadece internette değil kendi bilgisayarınızda çalışan, bi takım işlerinizde pratiklik kazandıracak programlar da yapabilirsiniz.
Perl öğrenmek zor ve zahmetlidir ama sonucunda bir "programlama dili" öğrenmiş olursunuz ve ilerde başka bir programlama diline geçtiğinizde özellikle döngüler ve değişkenler konusunda çok rahat edersiniz.
Perl öğrenmek için ortalama html bilgisine (genel kodlar, özellikle form ve input etiketleri) sahip olmanız gerekiyor.
Buradaki örnek kodları mecbur kalmadıkca ya da kendi yazdığınız kodlarla karşılaştırmak gerekmedikce kullanmamanızı tavsiye ederim, kodları kendiniz yazarsanız hem eliniz alışır hem de hata yapa yapa hata yapmamayı, hatasız kod yazmayı öğrenirsiniz. Örnek kodları zip'li halde buraya tıklayıp indirebilirsiniz.
Perl'de Mantıksal Sınama
Perl'de Mantıksal Sınama:
Perl ile formdan gelen ya da bir şekilde elde ettiğimiz veriyi mantıksal sınamaya tabi tutabilir ve programı buna göre yönlendirebiliriz. Perl'de mantıksal sınamalar şu şekildedir:
>Sayısal değerlerde mantıksal sınama:
İşlem Anlamı
x > y x büyüktür y'den
x < y x küçüktür y'den
x >= y x büyük eşittir y'ye
x <= y x küçük eşittir y'ye
x == y x eşittir y'ye
x != y x eşit değildir y'ye
>Sayısal olmayan değerlerde mantıksal sınama:
İşlem Anlamı
a eq b a eşittir b'ye
a ne b a eşit değildir b'ye
a lt b a küçüktür b'den
a gt b a büyüktür b'den
a le b a küçük eşittir b'ye
a ge b a büyük eşittir b'ye
Buna göre perl'ile bir veri ya da değişken üzerinde mantıksal sınama yapmak için bu verinin ya da değişkenin içeriğinin sayısal olup olmadığını bilmemiz gerekiyor.
>Mantıksal sınama if, elsif, else fonksiyonları
Yukarıda sayısal değerlerde ve sayısal olmayan değerlerde (string) karşılaştırma operatörlerini gördünüz ama ne işe yaradıklarını bilmiyorsunuz. Bu operatörler perl'de karşılaştırma yapmaya olanak verir ve bunu da if(), elsif() ve else() komutlarıyla sağlarız. Kullanımı şu şekildedir:
Kod:
if (koşul)
{
koşul sonunda yapılacak işlem
}
elsif(koşul) {
koşul sonunda yapılacak işlem
}
else
{
Bu iki (ya da daha fazla) koşulun gerçekleşmemesi durumunda yapılacak işlem
}
Buna göre iki rakamı form vasıtasıyla programa gönderelim, program bize bu iki rakamı karşılaştırıp sonucunu ekrana yazsın.
Kod:
#!/usr/bin/perl
# if1.cgi
use CGI qw(Resimler Sadece üyeler içindir!tandard);
print "Content-type:text/html ";
$query = new CGI;
$ilksayi = $query -> param('ilksayi');
$sonsayi = $query -> param('sonsayi');
print "<html><body>";
if ($ilksayi ne "" or $sonsayi ne "") {
if ($ilksayi == $sonsayi) {
print "ilksayı($ilksayi) ile ikinci sayı($sonsayi) eşit!";
}
elsif ($ilksayi != $sonsayi) {
print "ilksayı ($ilksayi) ile ikinci sayı($sonsayi) eşit değil!";
}
}
print "<br>";
print "<form action=if1.cgi method=post>";
print "Birinci sayı: <input ******text name=ilksayi><br>";
print "İkinci sayı: <input ******text name=sonsayi>";
print "<input ******submit value=Karşılaştır>";
print "</body></html>";
İlk "if" karşılaştırması dikkatinizi çekti mi? Bu ilk karşılaştırma sayesinde eğer formdan veri gelmemişse sadece form görünüyor, formdan veri gelmişse karşılaştırma yapılıyor ve altında yine form gösteriliyor böylece programın saçmalamasını önlüyoruz.
Aynı şeyi bir de sayısal olmayan değerlerle, yani harflerle yapalım. Mesela formdan gönderilen veriler bizim ismimize eşitse ekrana "Senin isminle benim ismim aynı, biz adaşız" yazdıralım, değilse "isimlerimiz aynı değil, biz adaş değiliz" yazdıralım.
Kod:
#!/usr/bin/perl
# if2.cgi
$benim_ismim = "hakan";
use CGI qw(Resimler Sadece üyeler içindir!tandard);
print "Content-type:text/html ";
$query = new CGI;
$isim = $query -> param('isim');
print "<html><body>";
if ($isim ne "") {
if ($isim eq $benim_ismim) {
print "Bizim isimlerimiz aynı, biz adaşız!";
}
elsif ($isim ne $benim_ismim) {
print "İsimlerimiz aynı değil, biz adaş değiliz";
}
}
Perl'de matematiksel işlemler
Matematik ile aranız nasıl bilmiyorum ama gerçek CGI programları yazmaya başladığınızda programlarınızın içinde mutlaka matematiksel işlemler yapmak zorunda kalacaksınız. Bu işlemler çok karmaşık işlemler olabileceği gibi değişkenleri toplama, çıkarma, döngü sırasında bir değer arttırma şeklinde de olabilir. Bu derste perl ile yapabileceğimiz matematiksel işlemleri ele alacağız.
Perl ile dört işlem
Perl ile sayıları ya da sayı içerikli değişkenleri toplayabilir, çıkarabilir, bölebilir ya da çarpabiliriz. Örneğin elimizde şu değişkenler var :
Kod:
$a = 1;
$b = 2;
$c = 3;
$d = 4;
Önce $a ile $b'yi toplayalım
Kod:
$sonuc = $a + $b;
Kod:
print $sonuc;
Bu kod ekrana $sonuc değişkenin değerini yani "3" yazdıracaktır. $b değişkeninden $a değişkenini çıkarmak için ise şöyle bir kod yazmamız gerekir.
Kod:
$sonuc = $b - $a;
print $sonuc;
Bu kod da ekrana "1" yazdıracaktır. Çarpma işlemi ise şu şekilde :
Kod:
$sonuc = $b * $d;
print $sonuc;
Bu kod da $b değişkeni ile $d değişkenlerinin değerlerini çarpıp sonucu $sonuc değişkenine atar ve ekrana "8" yazdırır. Bölme işlemi ise şu şekilde :
Kod:
$sonuc = $d / $b;
print $sonuc;
Bu kod da $d değişkeninin değerini $b değişkeninin değerine böler (4 / 2), sonucu $sonuc değişkenine atar ve ekrana yazdırır. Eğer birden fazla işlem yapmak istiyorsak, mesela önce $a, $b, ve $c değişkenlerini toplayıp sonuçtan $d değişkenini çıkarmak istiyorsak şu şekilde bir kod kullanmamız gerekir :
Kod:
$sonuc = ($a + $b + $c) - $d;
print $sonuc;
Bu kodla program önce $a, $b ve $c değişkenlerinin değerlerini toplar, sonra çıkan sonuçtan $d değişkeninin değerini çıkarır ve sonucu (6-4 = 2) ekrana yazar.
Dört işlem için bu kadar örnek fazla bile. Şimdi öğrendiğimiz bilgilerden daha "işe yarar" bir örnek yapalım. Örneğimiz formdan gelen iki sayı üzerinde işlem yapsın. Bu işlem yine ziyaretcinin (yani bizim) seçtiğimiz işlem olsun. Yani kısaca dört işlem yapabilen basit bir hesap makinası yapalım.
Kod:
#!/usr/bin/perl
# hesapla.cgi
use CGI qw(Resimler Sadece üyeler içindir!tandard);
print "Content-type:text/html ";
$query = new CGI;
$sayi1 = $query -> param('sayi1');
$sayi2 = $query -> param('sayi2');
$islem = $query -> param('islem');
print "<html><body>";
if ($islem ne "") {
if ($islem eq "topla") {
$sonuc = $sayi1 + $sayi2;
print "İşlem sonucu : $sonuc";
}
elsif ($islem eq "cikar") {
$sonuc = $sayi1 - $sayi2;
print "İşlem Sonucu : $sonuc";
}
elsif ($islem eq "bol") {
$sonuc = $sayi1 / $sayi2;
print "İşlem Sonucu : $sonuc";
}
elsif ($islem eq "carp") {
$sonuc = $sayi1 * $sayi2;
print "İşlem Sonucu : $sonuc";
}
}
print "<form action=hesapla.cgi method=post>";
print "<input ******text name=sayi1> sayısı ile ";
print "<input ******text name=sayi2> sayısını ";
print "<select name=islem>";
print "<option value=topla>Topla<br>";
print "<option value=cikar>Çıkar<br>";
print "<option value=bol>Böl<br>";
print "<option value=carp>Çarp<br>";
print "</select>";
print "<input ******submit value=YAP!>";
print "</form>";
print "</body></html>";
Perl ile ileri matematik işlemleri de yapabilirsiniz. Mesela;
Kod:
$sayi = 12;
$karekok = sqrt($sayi);
print $karekok;
Bu kod sqrt() fonksiyonu ile $sayi değişkeninin değerini $karekok değişkeninin değerine atar ve ekrana 12'nin karekökünü yazdırır.
Kod:
$sayi = 12;
$log = log($sayi);
print $log;
Bu kod log() fonksiyonunu kullanarak $sayi değişkeninin logaritmasını alır, $log değişkenine atar ve ekrana yazdırır. Aynı şekilde exp() fonksiyonu ile sayının exponensiyelini, int() fonksiyonu ile sayının integerini, abs() fonksiyonu ile sayının mutlak değerini bulabilirsiniz.
Perl ile dosya işlemleri
Perl sunucu tarafında çalışan bir dildir dedik. Perl vasıtası ile sunucu tarafında yani web alanında dosya açabilir, açtığımız dosyaya kayıt yapabilir -ya da ekleme yapabilir- , dosyadan belli bir kaydı silebilir ya da dosyayı silebiliriz. Perl'in bize sağladığı bu olanağı kullanarak açtığımız herhangi bir dosyayı veritabanı olarak kullanabiliriz. Perl ile server'da varolan ya da varolmayan bir dosyayı open() fonksiyonu kullanarak açarız. open() fonksiyonu ile dosyayı açtıktan sonra dosyayı bir "file handle" olarak tanımlar ve dosya üzerinde işlem yapıp dosyayı kapatana kadar da bu "file handle" ı kullanırız.
Yeni dosya oluşturma ve kayıt yapma
Dosyayı açtıktan sonra formdan gelen ya da herhangi bir şekilde elde ettiğimiz veriyi istediğimiz formatta dosyaya print "..."; şeklinde yazdırabiliriz. Bunun için eğer dosyaya yazarken eski bilgilerin üzerine yazılmasını, eski bilgilerin silinmesini istiyorsanız open fonksiyonu şu şekilde kullanılmalıdır:
Kod:
open (HandLE, ">dosya.dat");
HandLE yazan yer "file handle" dediğimiz, daha sonra dosya üzerinde işlem yaparken kullanacağımız takma isimdir. Dosyalara isim verirken Türkce karakter kullanılmaz, küçük harf kullanmanın bir sakıncası olmamasına karşın genelde büyük harf kullanılır. Dediğim gibi dosyaya yazarken eski bilgilerin silinmesini istiyorsanız dosyayı açarken dosyadan önce bir tane büyüktür (>) işareti kullanmanız gereklidir. Eğer kayıt yaparken eski dosyadaki bilgileri muhafaza etmek istiyorsanız dosya adından önce iki tane büyüktür (>>) işareti kullanmanız gerekir.
Kod:
open (HandLE, ">>dosya.dat");
Bu şekilde dosyaya yazdırdığınız bilgiler eski bilgilerin üzerine değil, bir alt satırına kaydedilir.
Örnek
Kod:
#!/usr/bin/perl
# dosya1.cgi
use CGI qw(Resimler Sadece üyeler içindir!tandard);
print "Content-type:text/html ";
$query = new CGI;
$isim = $query -> param('isim');
$soyad = $query -> param('soyad');
if ($isim eq "" or $soyad eq "") {
print "<html><body>";
print "<br>";
print "<form action=dosya1.cgi method=post>";
print "Lütfen isminizi yazın: <input ******text name=isim><br>";
print "Lütfen soyadınızı yazın: <input ******text name=soyad><br>";
print "<input ******submit value=Yolla!></form></body></html>";
exit;
}
open (DOSYA, ">>veri.txt");
print DOSYA "$isim|$soyad ";
close (DOSYA);
print "Verdiğiniz bilgiler başarıyla <a href=veri.txt>veritabanına</a> kaydedildi.";
Örnekte isim ve soyad isteyen, verildiğinde bu isim ve soyadı "|" karakteri ile ayırıp dosyaya kaydeden bir program yaptık. Program her "Yolla" butonuna bastığınızda gönderdiğiniz isim ve soyadı programla aynı klasördeki "veri.txt" dosyasına kaydedecek, eğer böyle bir dosya yoksa oluşturup öyle kaydedecektir. Daha sonra bu veritabanını "|" karakterinden bölerek ekrana yazdırabiliriz. Eğer dosyayı açarken iki büyüktür (>>) yerine sadece bir tane kullansaydık program her seferinde veri tabanına sadece bir tane kayıt yapardı.
Dosya açıp dosya içeriğini ekrana yazdırma
Daha önce kayıt yapılmış bir dosya içeriğinin ekrana yazdırılması için şu işlemler yapılır: önce open() fonksiyonu kullanılarak dosya açılır, dosya içeriği bir değişkene (tek satırsa tekil, birden fazla satırsa dizi) atanır, daha sonra close () fonksiyonu ile açılan dosya kapatılır, bu dizi değişken direk print "@dizi"; şeklinde ya da bir döngü kullanılarak ekrana yazdırılır. Dosya açılırken dosya adından önce hiç işaret kullanılmaz ya da bir tane küçüktür (<) işareti kullanılır. Dizi değişken ekrana yazdırılırken veri dosyası içeriğine göre belli yerlerden (örneğimizde "|" karakterinden) split () fonksiyonu yardımıyla bölüm değişkene atanabilir.
Örnek
Kod:
#!/usr/bin/perl
# dosya2.cgi
print "Content-type:text/html ";
open (DOSYA, "veri.txt");
@veriler = <DOSYA>;
close (DOSYA);
print "Veritabanı içeriği<br><br>";
print "İsim - Soyad<br>";
foreach $dongu (@veriler) {
($isim, $soyad) = split (/|/, $dongu);
print "$isim - $soyad<br>";
}
Örnekte bir öneki örnekte oluşturduğumuz veritabanı dosyasını açtık, @veriler dizi değişkenine atadık, dizi değişken için foreach döngüsü oluşturduk, döngü boyunca satırları split () fonksiyonu ile "|" karakterinden bölüp $isim ve $soyad adlı değişkenlere atadık ve bu değişkenleri teker teker ekrana yazdırdık.
Perl ile web üzerinden mail gönderme
Perl ile linux server'larda (genelde CGI/Perl destekleyen server'lar linux işletim sistemi kullanır) sendmail programı kullanılarak direk web üzerinden, herhangi ek program kullanmadan ziyarecti tarafından mail gönderilmesini ya da programın kendi kendinin bir şart oluştuğunda size ya da programın gidişatına bağlı olarak başka bir kimseye mail gönderilmesini sağlayabilirsiniz.
Sendmail
Sendmail programı Linux server'larda web üzerinden mail gönderilebilmesine olanak veren bir programdır. Bu program aracılığıyla yazdığımız CGI programları ile web üzerinden mail gönderebilmemiz için sendmail'in linux server'ına göre tam yolunu bilmemiz gereklidir. Bu yol genellikle şu şekillerdedir :
Kod:
/usr/sbin/sendmail
/usr/bin/sendmail
Eğer server'daki sendmail yolunu bilmiyorsanız sunucu anasayfasında sunucu ile ilgili sıkca sorulan sorular bölümünde (FAQ) bulabilirsiniz ya da server adminlerine yazıp öğrenebilirsiniz. Windows altında sendmail programı bulunmadığı için az sonra yapacağımız yöntemle windows altında mail gönderemezsiniz.
Mail göndermek için önce mail programını open (MAIL, "|/usr/sbin/sendmail"); şeklinde mail programını açarsınız, daha sonra aynen mail gönderiyormuş gibi şu bölümlere gerekli yazıları ya da değişkenleri yazarsınız.
Kod:
print MAIL "from: [email protected]";
Bu bölüme mailin kimden gönderildiğini yazmanız gerekiyor.
Kod:
print MAIL "To:[email protected] ";
Buraya mailin hangi adrese gitmesini istiyorsanız onu yazmalısınız.
Kod:
print MAIL "Subject: Mesajın konusu ";
Bu bölüme de mailin "Subject/Konu" bölümünde yazmasını istediğiniz şeyi girmelisiniz.
Kod:
print MAIL "Bu mail web üzerinden otomatik olarak gönderilmiştir vs. vs. vs... ";
Bu bölüme mail içeriğini yazmalısınız.
Kod:
close (MAIL);
Son olarak da mail programını aynen dosya işlemleri gibi kapatıyoruz.
Dikkat etmemiz gereken en önemli nokta sendmail yolu. Eğer bu yol yanlış ya da eksik yazılırsa mail gitmez. Mail gönderirken değişkenleri kullanabilirsiniz ama eğer bir tekil değişkene e-mail atamanız gerekiyorsa "@" işaretinin önüne ters slash () koymanız gerekir. Aksi taktirde mail programı değişkeni yanlış algılar ve mail istenildiği şekilde gönderilemez.
Buraya kadar anlamamış olabilirsiniz, bir örnek yaparsak ne kadar kolay olduğunu anlayacaksınız. Örneğimizde web sitemiz üzerinden bize mail gönderilmesini olanak sağlayan bir form-mail programı yapalım. Ziyaretci kendi mail adresini ve mesaj konusunu girsin, mesajını girsin ve formu göndersin, gönderilen bilgiler de bizim mail adresimize ulaştırılsın. Tabii bizim mail adresini de program içerisinde bir tekil değişken olarak tanımlamamız gerekiyor.
Kod:
#!/usr/bin/perl
# mail.cgi
print "Content-type:text/html ";
$adresim = "[email protected]";
$sendmail = "/usr/sbin/sendmail";
use CGI qw(Resimler Sadece üyeler içindir!tandard);
$query = new CGI;
$gonderen = $query -> param('gonderen');
$konu = $query -> param('konu');
$mesaj = $query -> param('mesaj');
$istem = $query -> param('istem');
if ($istem eq "gonder") {
if ($gonderen eq "" or $konu eq "" or $mesaj eq "") {
print "Mail adresiniz, mail konusu ya da mesaj bölümü boş bırakılmış.
Bu bölümleri doldurmanız zorunludur. Lütfen geri dönüp tekrar deneyin...";
Kod:
exit;
}
open (MAIL, "|$sendmail");
print MAIL "from: $gonderen ";
print MAIL "To:$adresim ";
print MAIL "Subject: $konu ";
print MAIL "Siteniz iletişim sayfasından gönderildi: ";
print MAIL "$mesaj ";
print MAIL " ";
close (MAIL);
print "Mesajınız başarıyla gönderildi, en kısa zamanda cevap verilecek.
Teşekkür ederim...";
exit;
}
print "<form action=mail.cgi method=post>";
print "<input ******hidden name=istem value=gonder>";
print "Bize ulaşmak için aşağıdaki formu doldurun :<br><br>";
print "<table width=500 cellpadding=0 cellspacing=0 border=0>";
print "<tr>";
print "<td width=50\%>";
print "Mail adresiniz : ";
print "</td>";
print "<td width=50\%>";
print "<input ******text name=gonderen>";
print "</td>";
print "</tr>";
print "<tr>";
print "<td>";
print "Konu :";
print "</td>";
print "<td>";
print "<input ******text name=konu>";
print "</td>";
print "</tr>";
print "<tr>";
print "<td>";
print "Mesajınız :";
print "</td>";
print "<td>";
print "<textarea name=mesaj></textarea>";
print "</td>";
print "</tr>";
print "<tr>";
print "<td> ;</td>";
print "<td>";
print "<input ******submit value=Gönder!>";
print "</td>";
print "</tr>";
print "</table>";
print "</form>";
Programın içinde geçen "istem" değişkeni program akışını ayarlamak için atanmıştır. Eğer bu değişkenin içi boşsa en sondaki mail formu ekrana yazdırılır, yok eğer içeriği "gonder" ise yani form doldurulup gönderilmişse $gonderen, $konu ve $mesaj değişkenleri sorgulanır, içerikleri boşsa hata verilip program sonlandırılır (exit değilse mail gönderilir ve ekrana karşılama mesajı bastırılır. Bu programı kişisel server'ınızda denerseniz sadece karşılama sayfalarını ve programın içinde hata olup olmadığını görebilirsiniz ancak mail gönderemezsiniz.
Dizin İşlemleri
CGI sunucu tarafında çalışan bir programlama dilidir ve CGI programları sayesinde Perl dilinin kolaylıkları ve avantajlarını kullanarak kendi bilgisayarımızdaymışcasına rahat ve pratik olarak dosya ve dizin işlemleri yapabiliriz. Dosya işlemlerine örnek olarak dizindeki tüm dosyaları okuyup döngü ile ekrana yazdırma, klasör oluşturma, dosya silme (dosya içeriği değil!), klasör silme verilebilir.
Klasör oluşturma
Klasör oluşturmak için mkdir() fonksiyonu kullanılır. mkdir() fonksiyonu ile içi boş bir dizin oluşturulur. Kullanımı şu şekildedir :
mkdir ("bosdizin");
Bu kod bize "bosdizin" isminde boş bir dizin oluşturacaktır.
aLinti...