Aytaç Kalıncı – Perl Formatlı Yazdırma

format FORMATIM =

 

     ===================================

 

           B   a   s   k   ı        F   o   r   m   a   t   ı   d   ı   r

     ===================================

 

     .

 

syntax:

 

format FORMAT_ADI =

                        —-

                        —-   çıktı satırları

                        —- 

                        —-

                        .

 

BASKI FORMATINI GÖSTERME

Bu işlem için iki şeye ihtiyaç vardır.

  1. Kullanmak istediğiniz formatı, $~ sistem değişkenine(sistem değişkenlerini göreceğiz),  set edin.
  2. write fonksiyonunu çağırın.

Bununla ilgili bir örnek program görelim.

 

Ör. program:    #! /usr/bin/perl

            $~=”FORMATIM”;

            write;

            format FORMATIM =

            =====================

            g ö r mek  i s t e d i ğ i  n i z  t e x t

            =====================

.

 

çalıştır ¿

 

            =====================

            g ö r mek  i s t e d i ğ i  n i z  t e x t

            =====================

 

İzah:  format adı  ( FORMATIM ) sistem değişkenine  ($~)  atandığında  perl  şunu  anlar.

write fonksiyonu kullanıldığında atanan format basılacaktır.

Son kısımda ise formatın tanımlanması vardır.

 

Not: eğer $~ sistem değişkenine atanma olmasaydı, yazdırma işlemi standart çıktıya (STDOUT) olacak şeklinde algılanacaktı.

 

BASKI FORMATINDA DEĞERLERİ GÖSTERME

 

Tabi ki bu işlemin amacı değişken ve dizilerdeki değerlerin uygun biçimde yazdırılmasıdır.

 

Ör. program:(Sesli harfleri bulur sayar ve basar)

1:#!/usr/local/bin/perl

                 2:    

     3: while ($kayit = <STDIN>) {

     4: $kayit =~ s/[^aeiou]//g;

     5: @sesliler = split(//, $kayit);

     6: foreach $sesli (@sesliler) {

     7:         $seslisayisi{$sesli } += 1;

     8:          }

     9:  }

     10: $~ = “SESLIFORMAT”;

     11: write;

     12:

     13: format SESLIFORMAT =

     14: ==========================================================

     15: text içindeki sesli adedi:

     16:           a: @<<<<<   e: @<<<<<

     17:           $seslisayisi {“a”}, $seslisayisi {“e”}

     18:           i: @<<<<<   o: @<<<<<

     19:           $seslisayisi {“i”}, $seslisayisi {“o”}

     20:           u: @<<<<<

     21:           $seslisayisi {“u”}

     22: ==========================================================

     23: .

 

çalıştırılır¿

 

Bu bir sesli harf bulma testidir.

Kartal  Cimbomu  yendi.

 

^D

==========================================================

text içindeki sesli adedi:

a: 4        e: 3

i: 6        o: 1

u: 3

==========================================================

 

çalışması:  satır girilir.

  1. satırda; a,e,i,o,u dışındakiler elenir
  2. satırda; kalanlar(sesli) @sesliler dizisine aktarılır.
  3. satırda; sesliler sayılır (@sesliler dizisi test edilerek) ve %seslisayisi bileşik dizisine eklenir.
  4. satırda; basım formatı SESLIFORMAT olarak Set edilir.

 

 

NOT:

Değer alanları formatları için tanımlanan değerler hakkında 3 şeyi not etmeliyiz.

  1. alanların içerikleri basılır.
  2. alan boşluklarını hizalamaya gerek yoktur.
  3. alanlar bir üst satırda tanımlı formata uygun tanımlanırlar.

 

 

DEĞER ALANI FORMATI SEÇİMİ

 

Geçerli değer alanı formatları tablosu

 

 

Alan                 Değer Alan Formatı

 

@<<<             sola dayalı baskı

 

@>>>             sağa dayalı baskı

 

@|||                merkeze dayalı baskı

 

@##.##          sabit noktalı sayısal baskı

 

@*                  çok satırlı text

 

 

Not: @* haricinde tüm tanımlarda alan ölçüsü tanımlı karakter sayısı kadardır. Bu sayıya @ karakteri dahildir. Örneğin;

@>>>>           tanımı 5 karakter uzunluğu belirtir. Benzer şekilde

@##.##          uzunluğu 6 dır(.  da dahil)

 

 

ÇOK SATIRLI ALAN FORMATI KULLANIMI

 

Ör prog.

 

#!/usr/local/bin/perl

@kayit = <STDIN>;

$karakterler = join(“”,@kayit);

$~ = “SATIRLAR”;

write;

format SATIRLAR =

****** Girdiğiniz dosyanin icindekiler: ******

@*

$karakterler

*****************************************

.

 

çalıştır: program.pl ¿

 

ilk satir

ikinci satir

ucuncu satir

****** Girdiğiniz dosyanin icindekiler: ******

ilk satir

ikinci satir

ucuncu satir

*****************************************

 

  1. satır file’ın tamamını @input dizisine atar. Her bir satır dizinin bir elemanı olarak yerleşir.
  2. satır girilen satırları tek karakter stringi olarak $stringe birleştirerek yerleştirir. Bu karakter stringi newline karakterlerini de içermektedir.
  3. satır formatı çağırarak bastırır . @*tanımı çok satırlı text olarak formatlar.

 

DİĞER ÇIKTI DOSYALARINA YAZMA

Şu ana kadar write fonksiyonu ile standart çıktı dosyasına yazılma örnekleri gördük. Diğer dosyalara da yazdırabiliriz. En kolayı write’a argüman olarak file’ı geçirmektir. Örneğin DOSYAM ile temsil edilen dosyaya yazmak için (DOSYAM print formatı kullanarak) şu ifadeyi kullanırız; write (DOSYAM);

 

Bu örnekte DOSYAM file adı ve format adı olarak kullanılıyor bu düzenli ve hoştur ama bazı kısıtlamaları vardır. Böyle bir durumda $~ kullanılamaz.(print format seçimi için). $~ sistem değişkeni default file değişkeniyle çalışır. O da write ile çıktıya gönderilir. default file variable’nı değiştirmek böylece $~ da etkin file’ı değiştirmek için hazır select fonksiyonu kullanılır.

 

select (DOSYAM);

 

Select kullanım için default file değişkenini set eder. Örneğin; file değişkeni DOSYAM ile temsil edilen, dosyaya yazmak amacıyla  FORMATIM print formatını kullanmak için;

 

select(DOSYAM);

$~ = “FORMATIM”;

write;

 

kodlamak gerekir. Bu kodlama ile FORMATIM formatı DOSYAM değişkeni ile birleştirilmiş oldu. Bundan sonra write artık bu dosyaya yazdırmaya başlar. Eğer tekrar standart çıktıya yazdırmak istersek

 

select(STDOUT);  komutunu kodlarız.

 

Not: select kullanımı sadece write ‘ a değil print ‘ e de etki eder.

 

Select fonksiyonu çok kullanışlı olup aynı altyordamla aynı anda birden fazla dosyaya yazdırma imkanı sağlar. Örnek programda bunu görebiliriz.

 

 

1:  #!/usr/local/bin/perl

     2: 

     3:  open (DOSYA1, “>dosya1”);

     4:  $karakterler = “Denemeler”;

     5:  select (DOSYA1);

     6:  &kayityaz;

     7:  select (STDOUT);

     8:  &kayityaz;

     9:  close (DOSYA1);

     10:

     11: sub kayityaz {

     12:         $~ = “KAYITYAZ”;

     13:         write;

     14: }

     15:

     16: format KAYITYAZ =

     17:         CIKTI DOSYALARIMA@<<<<< YAZIYORUM.

     18:                      $karakterler

     19: .

 

çalışması:      program.pl¿

 

CIKTI DOSYALARIMADeneme YAZIYORUM.

 

Yukardaki satır hem ekrana hem de dosya1 isimli dosyaya yazar.

 

 

 

Not:  select ve $~ rastgele kullanılmaz format takibini kaybedebiliriz. Aşağıdaki örnekteki  gibi kullanım uygundur .

select (DOSYAM);

$~ = “FORMATIM”;

write;              

 

 

DEFAULT FİLE DEĞİŞKENİNİ SAKLAMAK (SAVE) .

 

Select son seçilen file değişkeninin içeriğini tutar. Örneğin;

 

$eskidosya = select(YENIDOSYA);

select ($eskidosya);

şeklindeki kullanımla da önceki dosya lazım olduğunda kullanılabilir.

 

Select ile seçim işini bir alt programla yapar ve programın geri kalanını etkilemede kullanabilirsiniz. Aşağıdaki örneği bu amaçla kullanabilirsiniz, inceleyin.

 

sub standarta_yaz {

       local ($dosyasakla, $formatsakla);

      $dosyasakla = select(STDOUT);

      $formatsakla = $~;

      $~ = “FORMATIM”;

      write;

      $~ = $formatsakla;

      select($dosyasakla);

}

 

Bu alt program default olarak STDOUT set etmek için select’i çağırır. select’in dönüş değeri önceki default file’ dır ve $dosyasakla içine saklanmıştır. Sonraki adım STDOUT’ a yazmak için kullanılan printformatı save etmektir. Altyordam bunu, $~ halihazırdaki değerini $formatsakla değişkenine saklayarak  yapar ve sonra altprogram, FORMATIM ‘ı printformatı olarak set eder..(o an kullanımda olacak printformat olarak) write çağrıldığında artık standart output dosyasına FORMATIM formatını kullanarak yazar.

Birinci adım; $~’ i $formatsakla içindeki değere resetlemek,

son adımda $dosyasakla içindeki file’ ı default output olarak set etmektir.

 

SAYFA BAŞLIK AYARI

 

dosyaadı_TOP

 

örnek:                 format STDOUT_TOP =

                           Ertanlar Kollektif Şirketi

                           .

 

yukarıda tanımdaki format her sayfa başına yazacaktır. Bu alanda değişkenlerde kullanılabilir(diğer format tanımlarında olduğu gibi) sayfa başlarına yazılan sayfa numaralarını sistem değişkeni olan

$%   tutar.

 

örnek:

 

format STDOUT_TOP =

Sayfa @<<.

$%

.

bu tanımla mesela 1.sayfa basılırken sayfanın üzerindeki baskı şöyle çıkar.

Sayfa 1.

 

BAŞLIK BASKI FORMATINI DEĞİŞTİRME

 

Bu işlem için $^ sistem değişkeni kullanılır. $~  de olduğu gibi default file değeri değişir. Örneğin; başlık formatı olarak BASLIGIM baskı formatını ve başlık file ‘ ı olarak ta DOSYAM ‘ ı kullanmak için şu ifadeleri ekleriz.

 

$eskidosya = select(DOSYAM);

$^ = “BASLIGIM”;

select($eskidosya);

.

 

SAYFA UZUNLUĞU ARALIĞI

 

Bu iş için $=  sistem değişkeni kullanılır. Default değer 60 satırdır. Mesela 66 satıra ayarlamak için şöyle yazarız.

 

$= = 66;       bu atama ilk write’ dan önce yapılmalıdır.sayfa ortasında böyle bir ayar yapılırsa sonraki sayfadan geçerli olur.

 

Baskı ve uzunluk ayarı ve formatı kullanan program örneği aşağıdadır.

 

Ör11.08

     1:  #!/usr/local/bin/perl

     2: 

     3:  open (BASKI, “>dosya.dat”);           #çıktı file’ ı tanımlandı.

     4:  select (BASKI);

     5:  $~ = “SATIRYAZ”;                 #çıktı formatı(OUTFILE için) bu atama sayfa başlığını #içermez.

     6:  $^ = “TOP_OF_PAGE”;         #OUTFILE için satır başlığı formatı belirlendi.

     7:  $= = 60;                                 #satır ayarı 60 olarak belirlendi.

     8:  while ($satir = <STDIN>) {

     9:          write;

     10: }

     11: close (BASKI);

     12:

     13: format TOP_OF_PAGE =

     14:                                     – sayfa @<

     15:                                              $%

     16: .

     17: format SATIRYAZ =

     18: @>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

     19: $satir

     20: .

 

çalışması: program.pl ¿

bu bir satirdir

bu ise ikinci satirdir

son satir da bu olsun bakalim.

^D

 

$ more dosya.dat  (dosya.dat içeriğini görelim)

 

– sayfa 1

bu bir satirdir

bu ise ikinci satirdir

son satir da bu olsun bakalim.

 

UZUN KARAKTER STRİNGLERİN FORMATI

 

@* multiline text karakteri ile çok satırı alt alta yazdırmıştık ama bunda formatlama yoktu. Düzgün basım formatı için başlangıçtaki @ yerine ^ karakteri kullanırız.

 

Örnek :program.pl

 

     1:  #!/usr/local/bin/perl

     2: 

     3:  $string = “Bu\ndengesiz satır\nörneğidir.\n”;

     4:  $~ = “OUTLINE”;

     5:  write;

     6: 

Aytaç Kalıncı – Perl Dosya İşlemleri

Dosya giriş çıkış fonksiyonları

 

Temel giriş çıkış fonksiyonları open, close, print, printf, write  fonksiyonlarıdır.

Bunları görmüştük . Hatırlayalım ve biraz daha inceleyelim.

 

Open Fonksiyonu : Dosya erişimi sağlar.

 

open (DOSYAM, “/u/ertan/dosya.txt”);

 

open, default olarak okuma amaçlı dosya açar.İlk defa açılan dosyaya yazmak için > kullanılır.

 

open (DOSYAM, “>/u/ertan/dosya.txt”);

 

Mevcut dosyaya eklemek için ise >> kullanılır;

 

open (DOSYAM, “>>/u/ertan/dosya.txt”);

Ayrıca

open (MAIL, “|mail ertan”);

 

şeklinde pipe ile kullanımını da görmüştük.

 

open fonksiyonu bunlardan başka daha birkaç çeşit dosya açma biçimi kullanır.

Aşağıdaki kullanım bunlardan birisidir.

 

open (CAT, “cat dosya*|”);

 

burada open, unix’teki  cat dosya* komutunu icra eder. | işareti dosya adından sonra yazılır. Buradaki komutla adı dosya ile başlayan tüm dosya isimleri bir dosyaya listelenir. Bu dosya bir giriş dosyası

gibidir ve CAT dosya değişkeni kullanılarak erişilebilir.

 

Örnek : pipe’lı komutla unix’teki w komutu çıktısını giriş olarak alma

 

Not: w komutu çıktısını aşağıda görüyorsunuz.Programı ona göre inceleyiniz.

ertan> w

 

11:09am  up 30 days,  2:31,  3 users,  load average: 0.06, 0.07, 0.01

 

USER      TTY      FROM                   LOGIN@    IDLE     JCPU   PCPU   WHAT

ftpadmin  ttyp3    darkness.anadolu  Wed 1pm  12:22m  0.12s  0.12s   -bash

poyraz     ttyp4    192.168.100.59      8:56am    0.00s     0.58s  0.07s   pine

ertan       ttyp0    192.168.100.9       9:52am    0.00s      0.29s  0.02s   w

 

 

1:  #!/usr/local/bin/perl

2:  # w çıktısından saat ve o an için bağlı olan kullanıcıları alalım

3:  open (WOUT, “w|”);       # w komutu çıktısı WOUT tarafından alınır

4:  $saat = <WOUT>;         # WOUT ‘ un ilk satırını okur(yani aşağıdaki satır)

#(11:09am  up 30 days,  2:31,  3 users,  load average: 0.06, 0.07, 0.01)

5:  $saat =~ s/^ *//;        #baştaki boşlukları çıkarır

6:  $saat =~ s/ .*//;          # ilk kelimeden sonraki her şeyi çıkartır(sondaki newline hariç).

#Kısaca 5. ve  6. satırlar saat’i(11:09am) elde eder.

$saat =~ s/pm|am$//;  #Not: sondaki -am- veya -pm- gösterimini kaldırmak istersek bu satırı ekleriz.

7:  <WOUT>;

#WOUT dan ikinci satırı okur bu satır bizim için gereksizdir. Aşağıdaki Başlık satırını atlat(geç) işlevi gerçekleşir.

#[USER   TTY   FROM     LOGIN@   IDLE   JCPU   PCPU   WHAT]

8:  @kullanicilar = <WOUT>;   #kalan satırlar @kullanicilar dizisine okunur.

9:  close (WOUT);  #WOUT dosyasıyla işimiz bitti.Sistem kaynaklarını tüketmemek için kapattık.

10: foreach $kullanicilar  (@kullanicilar) {#@kullanicilar’ın her bir elemanı, kullanıcı bilgisinin 1 satırını içerir.

11: $kullanicilar =~ s/ .*//; # programımız, bu satırın ilk kelimesine(kullanıcı adı) ihtiyaç duyar# .Bu yüzden 10,11 ve

12: }              #12 satırlarda döngü tamamlanınca newline hariç her şey temizlenir dizide sadece kullanıcı listesi bulunur.

13: print (“Saat:  $saat “);

14: print (“Halen bagli olan  kullanicilar:\n”);

15: $oncekikullanici = “”;

16: foreach $kullanici (sort @kullanicilar) {  #kullanıcılar alfabetik sıralanıyor

17:   if ($kullanici ne $oncekikullanici) ##Birden fazla aynı kullanici bağlantısı varsa, $oncekikullanici son basılan

#kullanici adını tutar. Ve $kullanici içindeki değer, $oncekikullanici ile aynı ise basılmaz

18:      print (“\t$kullanici”);      # ve uygun ise basılır

19:     $oncekikullanici = $kullanici;

20:         }

21: }

 

çalışması;    ertan> ./program.pl

 

Saat:  11:24

Halen bagli olan  kullanicilar:

ertan

ftpadmin

poyraz

 

 

DOSYADAN DOSYAYA YÖNLENDİRME

 

Unix’ te standart error ve standart çıktıyı aynı dosyaya yönlendirir.

sh komutu olarak şöyle yazılır.

 

$ program >dosya1 2>&1

 

Aşağıdaki program standart çıktı ve standart error dosyalarının yönlendirilişiyle ilgili bir örnektir.

 

Örnek :

#!/usr/local/bin/perl

open (STDOUT, “>Yazdir“) || die (“STDOUT dosya acma hatasi”);                 

open (STDERR, “>&STDOUT”) || die (“STDERR dosya acma hatasi”);            

print STDOUT (“Satir 1\n”);        

print STDERR (“Satir 2\n”);       

close (STDOUT); 

close (STDERR); 

 

çalışması; programın ekrana çıktısı yoktur.Çıktı Yazdir isimli dosyayadır.

 

Yazdir isimli çıktı dosyasının  içeriği şöyledir.

Satir 2

Satir 1

Sıralı yazmadığını gördük çünkü işletim sisteminin özelliğinden dolayı değerler buffer’ dadır ve buradan

önce STDERR ‘ e yazar. Bu problemi çözmek istersek dosya için buffer’ ı kullanmama işlemi yapılır.

Önce select ile dosya seçilir. Sonra $| sistem değişkenine 1 atanır.

Eğer $| değişkenine 0 olmayan değer atanırsa buffer kullanılmaz.

Tıpkı $~ ve $^ gibi $| da son kullanılan dosyaya etkilidir ki o dosya select ile son seçilendir.

Eğer  select kullanılmamışsa STDOUT’dur.

 

Şimdi $| kullanarak önceki örnekten farklı olarak sırayla yazan programı görelim.

 

Örnek :

 

#!/usr/local/bin/perl

open (STDOUT, “>Yazdir”) || die (“STDOUT dosya acma hatasi”);

open (STDERR, “>&STDOUT”) || die (“STDERR dosya acma hatasi”);

select (STDOUT);

$| = 1; #buffer’ı kapat.Seçilen dosya yazdırma kanalını aç,seçilen dosya  bir önceki satırda belirlendi:STDOUT.

# Not: Aslında STDOUT default dosya olduğundan onu select ile seçmeye gerek yoktu sadece $| = 1; yeterliydi.

print STDOUT (“Satir 1\n”);

print STDERR (“Satir 2\n”);

close (STDOUT);

close (STDERR);

 

Yazdir  dosyası içeriği aşağıdaki gibidir.

Satir 1

Satir 2

 

 

OKUMA VE YAZMA ERİŞİMİ TANIMLAMA

 

Okuma ve yazma erişimi ile dosyayı açmak için dosya adından önce +> kodlanır.

 

open (OKUYAZ, “+>dosya.dat”);

 

bu erişimle dosyanın bir kısmının üzerine yazma hakkı almış olursunuz. Bu tip kullanımlarda en verimli çalışma seek ve tell fonksiyonlari ile birlikte gerçekleştirilir.

Bunlar dosyada karakter(ler) atlama işlevi sağlar. İlerde inceleyeceğiz.

 

Not : ayrıca +<  eki’ de  okuma ve yazma amaçlı tanımda kullanılabilirler.

 

open (OKUYAZ, “+<dosya.dat”);

 

<  eki  okuma amaçlı tanımdır bu demektir ki aşağıdaki iki örnek aynıdır.

 

open (OKU, “<dosya.dat”);

open (OKU, “dosya.dat”);

 

 

close Fonksiyonu : dosya kapatır. Eğer | ile komut şeklinde kullanıldıysa (open (DOSYA, “cat dosya*|”); ) gibi O takdirde komut bitene kadar program bekler.

 

print, printf, write Fonksiyonu :  Bunları görmüştük.

 

select Fonksiyonu : Bir dosyayı default yapmak için kullanılır. Bunu da görmüştük.

 

eof Fonksiyonu : Dosya sonunu kontrol eder. Okunacak kayıt kalmamışsa 0 olmayan değer döndürür. Eğer okunacak kayıt varsa 0 döndürür. <> işaretlerinden etkilenir.  eof and eof() farklıdır.

eof nin <> işaretlerden nasıl etkilendiği görülür. Aşağıdaki örnekte bu durumu gözleyebiliriz.

Örnek programda  komut satırından isimleri verilen dosyalar(1 veya daha çok)’ın içeriği basılır.

 

dosya1 içeriği şöyle olsun;

Bu ilk dosyanın ilk satırı

Bu ilk dosyanın ikinci satırı

 

Dosya2 içeriği ise ;

Bu ikinci dosyanın ilk satırı

Bu ikinci dosyanın ikinci satırı

 

Örnek : eof ve <> birlikte kullanımı;

#!/usr/local/bin/perl

while ($kayit = <>) {#<>operatörü der ki; adları komut satırında verilen dosyalardan ,okunmakta olanın sıradaki satırını oku

print ($kayit);    # ve yazdır.

if (eof) {           #dosya sonu geldiyse aşağıdaki mesaji bas

print (“– Kullanımdaki dosyanın Sonu –\n”);

}

}

çalışması; ./program.pl  dosya1  dosya2

 

Bu ilk dosyanın ilk satırı

Bu ilk dosyanın ikinci satırı

 

— Kullanımdaki dosyanın Sonu —

 

Bu ikinci dosyanın ilk satırı

Bu ikinci dosyanın ikinci satırı

 

— Kullanımdaki dosyanın Sonu —

 

Not:  dosya sonu kontrolünde eof ve eof() kullanılır ama ikisi birlikte kullanılmaz.

 

Şimdi de parantezli eof kullanımına bakalım.

Örnek :

#!/usr/local/bin/perl

while ($kayit = <>) {

print ($kayit);

if (eof()) {

print (“– Kullanımdaki dosyanın Sonu –\n”);

}

}

çalışması ; ./program.pl  dosya1  dosya2

 

Bu ilk dosyanın ilk satırı

Bu ilk dosyanın ikinci satırı

 

Bu ikinci dosyanın ilk satırı

Bu ikinci dosyanın ikinci satırı

 

— Kullanımdaki dosyanın Sonu —

 

Çıktıyı incelediğinizde  dosya sonu mesajının her dosyanın sonunda değil tüm dosyaların okunması

Sonunda bir defa yazdığını görüyorsunuz. eof() kullanımında ancak tüm  dosyalar bitince true döner. Birinci dosya sonunda kontrolde false ‘e döner. Çünkü sırada okunacak ikinci dosya vardır.

Yalnız şuna dikkat etmemiz gerekir eof ile eof() arasında sadece <> operatörüyle kullanımda fark vardır. Yalnız başlarına kullanımda eof ile eof() arasında fark yoktur.

 

DOSYA İSİMLERİNİN DOLAYLI KULLANIMI

 

$dosya = “DOSYAM”;

open ($dosya, “>dosya.dat”);     gibi…

 

Örnek :

 

#!/usr/local/bin/perl

 

&dosya_ac(“OKU”, “”, “dosya1”);

&dosya_ac (“YAZ”, “>”, “dosya2”);

while ($satir = &dosyadan_oku(“OKU”)) {

&dosyaya_yaz(“YAZ”, $satir);

}

 

 

sub dosya_ac {

local ($dosya_degiskeni, $dosya_modu, $dosya_adi) = @_;

open ($dosya_degiskeni, $dosya_modu . $dosya_adi) ||

die (“$dosya_adi  dosyası açılamadı… “);

}

 

 

sub dosyadan_oku {

local ($dosya_degiskeni) = @_;

<$dosya_degiskeni>;

}

 

 

sub dosyaya_yaz {

local ($dosya_degiskeni, $satir) = @_;

print $dosya_degiskeni($satir);

}

 

çalışması,

 

program ekrana çıktı vermez.   dosya1 adlı dosyayı dosya2 ye kopyalar.

more dosya1 veya cat dosya1 gibi komutlarla baktığımızda her iki dosyanın da içerik olarak aynı

olduğunu görürüz.

$  cat dosya1

Bu ilk dosyanın ilk satırı

Bu ilk dosyanın ikinci satırı

 

$  cat dosya2

Bu ilk dosyanın ilk satırı

Bu ilk dosyanın ikinci satırı

 

DATALARI ATLAMA VE YENİDEN OKUMA

 

==  seek  ==     ==  tell  ==

 

Şimdiye kadar hep ilk sıradan başlatarak  okuma örnekleri gördük.

Perl bize iki hazır fonksiyon sunar.Bunlar seek ve tell fonksiyonlarıdır. Bu fonksiyonlar dosyada ileri, geri

hareketi veya tekrar okuma gibi işlevlere sahiplerdir.

 

seek fonksiyonu : bu fonksiyon dosya içinde ileri ve geri hareketi sağlar. Formatı ;

 

            seek (dosyadeğişkeni, atlanacak karakter sayısı, konum_sabiti);                   

 

eğer konum sabiti;

0 ise; dosya başı

1 ise; bulunulan konum değeri

2 ise; dosya sonu anlamı taşırlar.

 

Örneğin; DOSYAM adlı dosyanın başına atlamak istiyorsak

seek (DOSYAM, 0, 0); kodlanır.

Aytaç Kalıncı – Perl Referanslar

REFERANSLAR

 

Referans herhangi bir diziye, değişkene, altprograma işaret koymaktır denilebilir. Bir referans, bir değer için adrestir. Referanslar karışık data yapıları oluşturmada çok faydalıdırlar. Karışık data yapılarını gerçekte referanssız tanımlayamazsınız.

Perl5 hard ve sembolik referanslar sunar. Bir sembolik referans; değişken adını içerir. Sembolik referanslar değişken adı yaratmak ve onları çalışma anında adreslemek için çok yararlıdırlar. Temel olarak sembolik bir referans bir file adına benzer veya UNIX’ deki soft link gibidir. Hard referans ise hard linkler gibidirler. Sadece aynı yere bir başka yoldur. Hard referanslar referans sayısını izler bu sayı 0 olunca başvurulan yeri serbest bırakır.

 

Referansları Kullanma :

 

Bir skalar değer bir değişkene başvursun. $gosterge.  Herhangi bir skalar bir hard referans tutabilir. Çünkü diziler hash’lar(bileşik diziler) skalar içerirler . Bunları dikkate alarak kompleks yapılar inşa edilebilir.

$gosterge’nin değerini, bir diziye gösterge olarak kullanmak için dizi içindeki maddeye başvurulur. Şu notasyonla : @$gosterge. Bu kullanım kabaca, $gosterge nin adresini alır ve onu bir dizi olarak kullanır şeklinde anlaşılabilir. Benzer şekilde hash’lar (Bileşik Dizi) için %$gostergegösterimini kullanırız. Bu durum hash’ın ilk elemanına işaret koyarız anlamındadır.

 

 

Backslash (\) Operatörü Kullanımı :

 

Bir operatörün adresini geçirmek için kullanılır. Genelde değişkene ikinci bir yeni

referans yaratma amacıyla kullanılır.

 

$degisken = 10; $gosterge = \$degisken;

Burada; $gosterge, $degisken in değerini (10) içeren yere işaret koyar(referans verir). $degisken içindeki değeri $gostergeden alabilirsinizhatta $degisken yok olsa dahi. Burada çalışan hard referanstır. $gosterge değişkeni , $degisken’in adresini içerir onun değerini değil.Değere erişmek için iki adet $ ile refere($$gosterge ) edilir.

 

Örnek :

#!/usr/bin/perl

$deger = “ertan”;

$gosterge = \$deger;

printf “‘\$deger’ degiskeninin içindeki değer $deger olup, gösterge adresi:  $gosterge\n”;

printf “$gosterge memory adresindeki değer: $$gosterge\n”;

 

 

 

Çalışması ; program.pl

 

‘$deger’ degiskeninin içindeki değer ertan olup, gösterge adresi:  SCALAR(0x80c1288)

SCALAR(0x80c1288) memory adresindeki değer: ertan

 

 

 

Referans ve Diziler :

 

Perl konusunda belki en önemli nokta tüm @dizi ve %hash lar tek boyutludur ve skalar değer tutarlar ve direkt olarak dizi ve karmaşık data yapıları içermezler. Bir dizi elemanı sayı veya referans  dır. Backslash operatörü ( \ )  ile  skalar değişken gibi kullanılırlar.

 

Örnek :

#!/usr/bin/perl  $gosterge = \@ARGV;  printf “\n ARGV nin gösterge(pointer) Adresi = $gosterge \n”;  $i = scalar(@$gosterge);  printf “\n Argüman sayısı : $i \n”;  $i = 0;  foreach (@$gosterge) {      printf “$i : $$gosterge[$i++];\n”;      }

Çalışması ;  program.pl   1  2  3  4

ARGV nin gösterge(pointer) Adresi = ARRAY(0x806c378) Argüman sayısı: 4 0  :  1; 1  :  2; 2  :  3;

3  :  4;

Çalışması ;  program.pl

Argüman sayısı: 0

Programda,  komut satırından girilen değerleri saklayan  @ARGV dizisi elemanları içeriği basılır.

  1. satırda $gosterge referans olarak @ARGV’ye işaretlenmiştir(point). 3. satır ARGV’nin adresini basar. Siz genelde bu adresi kullanmazsınız ama başka bir diziyi kullanabilirsiniz. O dizinin ilk

elemanına erişim için bu adrese ulaşmak kısa yoldur. $gosterge pointer’i dizinin ilk elemanının adresini döndürür. 74 satır scalar () fonksiyonu çağırır ve (skalar değişken tipi ile karıştırmayınız) Dizideki eleman sayısına erişir. @ARGV’ye parametreler geçirilmiştir ama scalar() tarafından istenen $gosterge pointerinin tipini tanımlamak gerekir. Bu sebepten @$pointer kullanarak bir dizi olarak parametre tipi tanımlanır. Bu durumda $gosterge tipi dizi için bir pointerdir. @$pointer in ilk elemanıın adresi bu durumda  $pointer ile elde edilmiş olur. Onun eleman sayıları scalar () ile döndürülür.

 

 

Bileşik dizilerde (hash)  de   \   operatörü kullanılabilir.Aşağıdaki örnekte Bileşik dizilerde kullanımı görelim.

 

Örnek :

#!/usr/bin/perl# bileşik dizi referansları kullanımı%Aylar = (     ’01’, ‘Ocak’,      #    ’01’ => ‘Ocak’,  şeklinde de yazılabilirdi     ’02’, ‘Subat’,     ’03’, ‘Mart’,     ’04’, ‘Nisan’,     ’05’, ‘Mayis’,    ’06’, ‘Haziran’,    ’07’, ‘Temmuz’,             ’08’, ‘Agustos’,     ’09’, ‘Eylul’,    ’10’, ‘Ekim’,    ’11’, ‘Kasim’,    ’12’, ‘Aralik’,    ); $gosterge = \%Aylar;printf “\n Aylar Bileşik dizisinin adresi = $gosterge\n “;foreach $i (sort keys %$gosterge) {     # yukarda $gosterge pointerinin bileşik dizi                                          #gostergesi  olduğu belirtiliyor ve key’ ler (“01″,”02″,….”12”)  # sort() ile sıralanıyor     printf “$i. Ay = $$gosterge {$i} \n”;  # ve bastırılıyor}

 

Çalışması ; program.pl

Aylar Bileşik dizisinin adresi = HASH(0x80c1294)

  1. Ay = Ocak
  2. Ay = Subat
  3. Ay = Mart
  4. Ay = Nisan
  5. Ay = Mayis
  6. Ay = Haziran
  7. Ay = Temmuz
  8. Ay = Agustos
  9. Ay = Eylul
  10. Ay = Ekim
  11. Ay = Kasim
  12. Ay = Aralik

 

 

 

ÇOK BOYUTLU DİZİLERDE REFERANS :

 

Kare, köşeli parantez kullanılır. Genel formatı;

 

$diziReferans->[$indeks]                                       ……..tek boyutlu dizi

$diziReferans->[$indeks1][$indeks2]                     ……..iki boyutlu dizi

$diziReferans->[$indeks1][$indeks2][$indeks3]     ……..üç boyutlu dizi

şeklindedir.

 

Örnek :

#!/usr/bin/perl                        0             1               2,0         2,1     2,2                    3,0                 3,1       3,2$tablo = [‘Siyah’, ‘Beyaz’, [‘Kartal’,’2000′,’YILI’] , [‘ŞAMPİYONU’, ‘Puan’, ‘100’]];print “\$tablo ->[0] = $tablo->[0] \n”;print “\$tablo ->[1] = $tablo->[1] \n”;print “\$tablo ->[2][0] = $tablo->[2][0] \n”;print “\$tablo ->[2][1] = $tablo->[2][1] \n”;print “\$tablo ->[2][2] = $tablo->[2][2] \n”;print “\$tablo ->[3][0] = $tablo->[3][0] \n”;print “\$tablo ->[3][1] = $tablo->[3][1] \n”;print “\$tablo ->[3][2] = $tablo->[3][2] \n”;print “\n”;

 

Çalışması ; program.pl

 

$tablo ->[0] = Siyah

$tablo ->[1] = Beyaz

$tablo ->[2][0] = Kartal

$tablo ->[2][1] = 2000

$tablo ->[2][2] = YILI

$tablo ->[3][0] = ŞAMPİYONU

$tablo ->[3][1] = Puan

$tablo ->[3][2] = 100

 

 

            ALT YORDAMLARA REFERANS :

 

Bir skalar veya dizinin bir maddesine referansla aynı tarzdadır.

Aşağıdaki tipte ifade edilir.

$alt_prog_gosterge = sub {alt yordam bildirimleri} ;Not:   referans tarafından alt yordam çağırmak için aşağıdaki tipte referans kullanmalısınız.&$alt_prog_gosterge( parametreler);

Örnek :

#!/usr/bin/perl  sub arguman_yaz{               my ($d,$d,$f) = @_;    print “$d $e $f \n”;    return $d;};  $a = 1; $b = 2; $c = 4; $ilk  = arguman_yaz($a,$b,$c); printf “\t$ilk\n”; $ikinci  = arguman_yaz(4,5,6); printf “\t$ikinci\n”;

Çalışması ; program.pl

2   4           25   6           5

Çok Boyutlu Dizilerle, Çalışmak İçin, Altyordam Kullanımı :

 

Örnek : #!/usr/bin/perl@isimler = (Ahmet,Bertan,Ertan);@telefonlar = (2126840,2126841,2126842);$say = 0;&aktar_yazdir(\@isimler, \@telefonlar); sub aktar_yazdir{my ($ad,$tel) = @_;foreach (@$ad) {print “ad[$say] = ” . @$ad[$say] . ” ” . “\ttel[$say] = “. @$tel[$say] .”\n”; $say++;   }}  Çalışması: program.plad[0] = Ahmet   tel[0] = 2126840 ad[1] = Bertan  tel[1] = 2126841 ad[2] = Ertan   tel[2] = 2126842

Aytaç Kalıncı – Perl Komut Satırı

KOMUT SATIRI SEÇENEKLERİ

 

Bir perl programına seçenek geçirmenin iki yolu vardır.

 

  1. Komut satırında
  2. Programın ilk satırında

 

KOMUT SATIRINDAN SEÇENEK GİRME

 

Syntax : Perl seçenek program adı

Örnek : $ perl -s -w test1 c¿ komutu ile test1 programı –s ve –w seçeneklerini alır ve çalışır.  Bazı seçeneklerde değer alabilir.Örnek : $ perl -0 26 test1                        ¯                    integerAradaki boşluğu (seçeneklerde) kaldırarak da aynı iş yapılır.                  $ perl -026 test1      …gibi   $ perl -sw test1       …gibi               $ perl -sw026 test1  …gibi PROGRAMDA SEÇENEK TANIMLAMA #!/usr/bin/perl –w            # perl4 te tek seçeneğe izin var. Perl5 serbest                                              # ama bazı sistemler 32 karakterden fazlasını almıyor. Not : Komut satırında perl –s test1 ¿ girmişsek programın ilk satırı ise #!usr/bin/perl  –w   ise Program çalışırken sadece –s seçeneği ile çalışır. –w dikkate alınmaz. SEÇENEKLER               -v : Perl’in versiyonunu verir.   $ perl -v test1 ¿-c : syntax’ı kontrol eder.        $ perl –c test1 ¿Program çalıştığında test1 syntax ok mesajı verir, hata varsa bildirir.-w : Yazım ikazı, program yazımında syntax değilde yazım kullanımı konusunda hata varsa kontrol eder. Mesela yanlış değişken adı veya = = yerine eq kullanılması gibi. Örneğin ; $y=$x; satırına geldik diyelim eğer $x tanımsız ise Identifier main::x ….. şeklinde mesaj verir.(Bunlarla ilgili geniş bilgiyi sonraki  bölümlerde inceleyeceğiz.) Not : -w ile –c kullanımı hem syntax hem kullanım hatasının tespiti için yararlıdır. -e : Tek satır programı icrası (bir satırda birden fazla da kullanılabilir). Örneğin ; perl –e “print(‘Hello’);” –e “print(‘there’);” ¿  Ekrana : Hello there yazar. -s : Kendi komut satır seçeneklerinizi tedarik eder.Perl –s test1 –q ¿  program test1’i başlatır ve –q seçeneğini ona geçirir. Eğer –s yazmasaydık –q seçeneği programa geçmezdi. Seçenek tek karakterden fazla olabilir. $sebze değişkenini kullanacaksakperl –s test1 –sebze ¿ gireriz.$sebze’nin değeri 1’dir. (perl otomatikman 1 verir.)  veya başka bir değer atama işi şu şekilde yapılabilir.perl –s test1 –sebze=”nar” ¿ $ ebze içeriği ”nar”  olur.  -P option : C preprocessor kullanma seçeneğidir. Perl –P örnekprog ¿ bu komutla örnekprog , C önişlemcisinden den alınır sonra icra için perl’e geçer. C önişlemcisi bize C deki bazı ifadelerini kullanma izni verir. # ile başlarlar. Örnek ; # define USER “ertan”# define EXPRES (14+6)define tanımlı makroya değer geçirir. # define bulunan bir perl program örneği :   #!/usr/local/bin/perl -P  #define AL_AF_INET   2  print (“Bir internet adresi giriniz:\n”);  $makine = <STDIN>;  $makine =~ s/^\s+|\s+$//g;  @adres = split (/\./, $makine);  $paket = pack (“C4”, @adres);  if (!(($ad, $adlar, $adrestipi, $uzunluk, @liste) =         gethostbyaddr ($paket, AL_AF_INET))) {         die (“Adres Bulunamadı.\n”); } print (“Tam adı: $ad\n”); if ($adlar ne “”) {         print (“Diger adları:\n”);         @liste = split (/\s+/, $adlar);         for ($i = 0; $i < @liste; $i++) {                 print (“\t$liste[$i]\n”);         }} Çalışması :Bir Internet adresi giriniz:194.27.16.7Tam adı:  sirius.gazi.edu.trDiger adları :                       sir           sirius Define ile ilgili bir başka kullanım : #define FIRST     1#define SECOND    FIRST$result = 43 + SECOND;   ( yani 43+1)  #include Kullanarak Diğer Dosyaları Alma : #include dosyaadı include  bir başka C önişlemci komutu olup, tanımlı program parçasını dosya içeriğinine dahil etme işlevi görür.  Örnek ; myincfile.h dosyasını dahil etmek için #include ” incdosyam.h”   (bu dosya local dizin’de aranır. diğer dizinlerde de aratmak icin –I opsiyonu kullanılır). Verilen patern’de arama için,örneğin;#include “/u/pub/incdosyam.h”   şeklinde kodlanır. -I : bu seçenek C include dosyalarını aratır.-P ile birlikte kullanıldığında bu dosyaları hangi dizinde aranacağı  belirtilmiş olur. perl -P -I /u/home/incdizin  dosya birden fazla dizinde  aratmak için; perl -P -I /u/home/incdizin  -I //u/home/incdizin2  dosya Not : -I ile verilen dizinler @INC içinde saklanır. -n  : Çoklu dosyalarla işlem seçeneğidir. Birden fazla giris (dosya/satır)okuması yapar. Unix’te birçok dosya ile işlem mesela komut satırından yapılabilir. (örneğin;Cat dosya1 dosya2 dosya3 komutu     dosya1, dosya2, dosya3 dosyalarını okur ve ekrana basar v.b) Perl’de aynı işi <> operatörü ve döngü yardımıyla yapabiliriz. while ($line = <>) {              —-              —- satırlar        —- } Bir başka metot da –n kullanımı ile gerçekleştirilir. Bu seçenek, komut satırından birden fazla girdi alır. Konuya ilişkin bir örnek görelim :Bu örnek girilen satırın iki yanına * koyar. Örnek ;#!/usr/bin/perl -n # giriş satırı sistem değişkeni olan $_içinde depolanacaktır. $line = $_; chop ($line); printf (“* %-52s *\n”, $line); Çalışması ; Bu tek satırdır ¿        *  Bu tek satırdır                                            *Bu da ikinci ¿        *  Bu da ikinci                                                *   -n seçeneği bu programı görünmez bir while döngüsüyle kapatmıştır. Komut satırından girilen değerler $_ içine depolanır. -n ile –e birlikte kullanişlıdır. Örneğin aşağıdaki komut cat komutuna eşittir. $ perl -n -e “print $_;” dosya1 dosya2 dosya3  veya daha basit olarakperl -n -e “print” dosya1 dosya2 dosya3  her üç dosya içeriği alt alta ekrana listelenir. $_ değişkeni default değişkendir. Hatta pattern örneklerde ve yerine koymalarda operatörler $_ üzerinden default işlem yaparlar.   Örnek ; $ perl -n -e “print if /[0-9]/” dosya1 dosya2 dosya3  ¿  dosya1, dosya2 ,dosya3   ‘ü tarar rakam içeren girişleri (satırları) listeler. -p  : Bu seçenekte  –n ’e benzer farklı olarak okunan satırları  basar. $ perl -p -e “;” dosya1 dosya2 dosya3  ¿  dosya1, dosya2, dosya3  içerikleri  okunur ve  alt alta ekrana basılır. (yukardaki örnek unix’teki Cat dosya1 dosya2 dosya3  komutuyla aynıdır.) -p seçeneği –i ile de çok kullanılır.  Not : -p ve –n birlikte kullanılırsa, -n dikkate alınmaz. –i : Dosya yazma (editing)seçeneğidir Görüldüğü üzere –p ve –n seçenekleri komut satırında tanımlı dosyaları okuyordu. –i seçeneği, -p ile kullanıldığında, dosyadan okuduğunu tekrar oraya yazma amacıyla kullanım işlevini sağlar (unix’deki sed gibi dosyayı edit etme işlevi).  $ perl -p -i -e  “s/fgh/xwz/g;” dosya1 dosya2 dosya3  komutu ile dosyalardaki fgh yerine xwz konulur.   -a  : Satırı kelimelere ayırarak listeye (dizi)dönüştürme seçeneğidir. Bu seçenek -n veya –p ile kullanılır ve satırı otomatikman kelimelere ayırır (white space karakteri olmayan). Bu kelimeler @F  sistem dizi değişkeninde saklanırlar. –a seçeneği satırda istenenleri çekip çıkarmada çok yararlıdır.Örneğin  programa girişi yapılan satırBu bir deneme kaydıdır  ise @F sistem dizi değişkeninin içeriği şu şekildedir:(“Bu”, “bir”, “deneme”, “kaydıdır”)  Mesela; Okunacak dosya adı datadosya ve  kayıt formu şöyle olsun. Ad                     No     Toplam girilmiş kayıtlar ise, Bertan TURK    103     474.32ertan NAR         10       57.32nur TABAK     1023    4700.32  -n ve –a kullanılarak dosyadan No ve Toplam alanlarını cekip çıkaran ve yazdıranbir program örneği; #!/usr/local/bin/perlwhile ($F[0] =~ /[^\d.]/) {shift (@F);next if (!defined($F[0]));}print (“$F[0] $F[1]\n”); bu programın adı prog.pl olsun /usr/local/bin/perl -a -n prog.pl  datadosya   ¿               103     474.32               10       57.32  1023    4700.32 -F  : (split) ayırma patterni tanımlama seçeneğidir. Kelimeleri ayırırken ayraç karakteri de koyar. –a ile birlikte kullanım için dizayn edilmiştir.  Önceki programı aşağıdaki gibi çağrılmış olsun; /usr/local/bin/perl -a -n -F:: prog.pl  datadosya   ¿  Bu durumda dosya okunurken kelime aralarına : : yerleştirilir.                Bertan TURK:: 103::474.32   gibi… Not : Normal split’de :: işaretleri // içine alınırdı. Burada bu karakterler olsada olur olmasada yani /::/ ile :: aynıdır. -0  : (O harfi değil, Sıfır’dır)Satır sonu girişini tanımlayan seçenektir. Şu ana kadar giriş satırlarını dosyadan  veya klavyeden okuyorduk sonunda \n karakteri vardı. Biz istersek sondaki bu karakteri –0 seçeneği ile kendimiz belirliyebiliriz. Bu ASCII (8 tabanlı – octal) olarak belirlenebilir.  Örneğin ; Boşluk karakterinin octal değeri 040 dır.Perl -0 040 prog.pl okunandosya ¿   Komuyuyla  prog.pl programı çağrılır onun okuma yaptığı okunandosya’nın satır sonu karakteri olarak boşluk karakteri kullanılması sağlanır. Konuyu iyice anlamak için diyelim ki data.txt dosyamız var ve içeriği de şöyle:(tabiiki satır sonlarında \n -satır sonu- karakteri var)Bu ilk satırikinci satırucuncu satır Perl programımızın adı prog.pl ve içeriği de aşağıdaki kodlama olsun. #!/usr/local/bin/perl -0040while ($line = <>) {$line =~ s/\n//g;next if ($line eq “”);print (“$line\n”);} Calıştırdığımızda ekran dökümü aşağıdaki gibi olacaktır.$ prog.pl data.txt ¿Bu ilk satırikinci satırucuncu satır$     – l (küçük -le- harfi)  :Satır sonu çıktısı tanımlama seçeneğidir. Bu seçenek size belirlenen satır sonu karakterinin print fonksiyonu ile basılmasını sağlar. 0 gibi –l de octal değerle kullanılır(ASCII karakterin değeridir). Bu opsiyon tanımlanınca perl 2 şey yapar. 1.  Eğer –p veya –n opsiyonu tanımlıysa klavyeden girilen satırdaki son karakteri kaldırır. 2. Print fonksiyonu çağrılınca –l ile tanımlanan karakter basılır.   Örnek Program ; Bu program kelimeler arasına ascii kodu 197 .(Octal değeri 305 dir) olan karakteri basar. Program adı program.pl olsun.   #!/usr/bin/perl -l305     print (“Merhaba”);               print (“Bu ikinci kelime”);            print (“Bu da 3. kelime”);   Çalışması : program.pl                  MerhabaÅBu ikinci kelimeÅBu da 3. kelimeÅ       -x  : Bir mesajdan bir program çekip alma seçeneğidir.   Örneğin bir file içeren elektronik mail mesajından programı almak gibi.   -x opsiyonu tanımlıysa perl tüm satırları görmezlikten gelir taki başlık satırını görene kadar. Bunu anlaması, başta #! Karakterlerlerini görmesiyle olur. Eğer perl5 kullanıyorsak başlık satırı ayrıca perl kelimesini içermelidir. #! ve  “perl”  görülünce , aşağıdaki 3 şarttan biri  gerçekleşinceye kadar proses devam eder.   1         Program sonuna gelindiğinde, 2     Ctrl+D veya Ctrl+Z karakterine gelindiğinde 3          _ _END_ _  ifadesi içeren satıra gelindiğinde   Örnek Program ;Bir program içinde perl program çalıştıran örnek. Program adı program.pl olsun.Komut satırından -x seçeneğiyle çalıştırılacak Aşağıdaki satırların tamamı program.pl  satırlarının kodlarıdır ——————————————————————— Bu program bir program içinde perl programi içerir program başlik açiklamasina kadarki satirlari dikkate almaz #!/usr/local/bin/perl print(“Merhaba, Ben bir perl programiyim!\n”); __END__ yukardaki satır program sonunu ifade eder. bu satir da dikkate alinmaz.. ——————————————————————– Çalışması :  $  /usr/bin/perl -x program.pl           Merhaba, Ben bir perl programiyim!     Diğer Seçenekler   -u  : core dump oluştur. -U  : Emniyetsiz icra. -S  : Program PATH environment variable’da tanımlı DIR’da. -D  : Dahili debugger flag’larını ekle. -T  : Yazma güvenlik opsiyonu. -d  : Perl debugger kullan.  —————————————————————————

Aytaç Kalıncı – Perl Fonksiyonlar

Proses (İşlem-program ve komut işlem süreci) :

Perl çalışan ve diğer programların yönetimi için geniş bir fonksiyon yelpazesi sunar. Bunlar 4 grupta

incelenebilir.

1 – İlave proses başlatma

2 – Çalışan program veya bir başka prosesi durdurma

3 – Program veya proses icra kontrolü

4 – Program veya proses yönetme (önceki kategorilere girmeyen)

Proses Başlatma : Proses yaratma ile ilgili prosesler eval, system, fork, pipe, exec, syscall’dır.

Eval : Bir karakter stringi, icra edilebilir perl programı gibi davranır.

Formatı;

eval (string)

Örnek :

$yaz = “print (“Selam size !!! n”);”; eval ($yaz);

Çıktısı,

Selam size !!!

Eval’in kullandığı string bir karakter string sabit veya bir ifade(değeri karakter string olmalı)

olabilir. Örnekte string önce $yaz sonra eval ‘e geçirildi.

Eval’e geçirilen string

print (“Selam size !!!n”); stringidir.

Eval fonksiyonu $@ sistem değişkenini kullanır. Bu değişken, icra edilebilir karakter stringini içereni

belirler. $@ içeriği null stringidir ve hata anında ,hata mesajı , @$ içinde oluşur. $@ içeriğinde bir şey

yoksa icra tamamdır.

Örnek : eval örneği

#!/usr/local/bin/perl $deger = 1; eval (“print (“Merhaba!n”); $deger = 7;”); print (“$deger değeri: $degern”);

Çalışması: program.pl

Merhaba! $deger değeri: 7 eval önce print(“Merhaba!n”); sonra $deger = 7; icra eder. Örnek : eval fonksiyonu kullanarak tell fonksiyonu var mı, yok mu test eden program #!/usr/local/bin/perlopen (DOSYAM, “dosya1”) || die (“dosya1 açılamadı”);eval (“$basla = tell(DOSYAM);”);if ($@ eq “”) { print (“tell fonksiyonu tanımlı.n”);} else { print (“tell fonksiyonu tanımlı degil!n”); }

Çalışması: program.pl

tell fonksiyonu tanımlı.

Eval çok faydalı bir fonksiyondur. Küçük programlarda çok iyi kullanıma sahiptir.

Büyük programlarda ise onu dosyaya yazdırıp system ile icra etmek daha iyidir.

system Fonksiyonu :

Daha öncede görmüştük. system(Liste); fonksiyona geçirilen Liste’de ilk argüman icra edilecek program sonrakiler ise programa geçirilecekargümanlardır.

Örnek :

#!/usr/local/bin/perl@liste = (“echo”, “Perl Öğreniyorum!”);system(@liste);

Çalışması : program.pl

Perl Öğreniyorum!

System fonksiyonu ile program çalışırken çıktıda bazen karışıklık olabileceğini düşünerek bu problemin çözümü için $| sistem değişkeni set edilir. Her bir file için 1 tanımlanmalıdır.Bu tanım o dosya için buffer yok demektir. Böylece çıktılar sırayla olur.

select (STDOUT);

$| = 1; select (STDERR);

$| = 1; gibi..

fork Fonksiyonu :

Bu fonksiyon, programınızın iki kopyasını yaratır. Parent ve child proses bu kopyalar eş zamanlı çalışırlar.

Syntax: $prosesid_değişkeni = fork(); Fork, child prosese 0, parent prosese 0 olmayan değer döndürür. Bu 0 olmayan değer child prosesin proses ID’sidir. Bu değer sizin hangi prosesin child, hangi prosesin parent olduğunu ayırmanıza yarar. Örnek :$deger = fork();if ($deger == 0) { # Burası child process exit; # child proces sonu} else { # parent proses} Eğer fork çalışmazsa, dönüş değeri tanımlanmayan bir değerdir. Bu değer ilerde göreceğimiz defined fonksiyonuyla test edilebilir. fork fonksiyonu kullanırken dikkatli olunmalıdır. Mesela, her iki kopya da print ediliyorsa karışıklık olabilir, yine döngü kullanılıyorsa çok fazla kopya etkisi olur gibi…

pipe Fonksiyonu :

fork fonksiyonu ile birlikte tasarlanmıştır. Bu fonksiyon child ve parent proses iletişimini sağlar.

formatı : pipe (giriş_dosyası, çıkış_dosyası);

kullanımda olmayan dosya değişkenleri

Örnek :

#!/usr/local/bin/perlpipe (GIRIS, CIKIS); # GIRIS ten okutabileceğini CIKIS’ a gönderir$prosesler = fork(); # program child ve parent prosese ayrılırif ($prosesler != 0) { # hangi prosesin child hangisinin parent olduğu test edilir # bu aşamaya gelindiğinde parent prosestir. Parent proses datayı CIKIS yoluyla göndereceğinden, close (GIRIS); # GIRIS erişimine gerek yoktur. Bu yüzden GIRIS’i kapatır. print (“Bir satır giriniz:n”); $oku = ; #Data standart girişten alınır ve print CIKIS ($oku); # CIKIS değişkeni yoluyla child prosese gönderilir } else { # bu aşamada proses child prosestir ve bu yüzden data GIRIS yoluyla alınacağından close (CIKIS); # CIKIS ‘a gerek yoktur CIKIS kapatılır$oku = ; # GIRIS’den datayı okur.Çünki,data CIKIS’dan GIRIS ‘e pipe edilmiştir print ($oku);exit (0); #child proses exit ile ölür ve GIRIS otomatikman kaldırılır }

Çalışması : program.pl

Bir satır giriniz :Bu bir satırdırBu bir satırdır$

exec Fonksiyonu :

Sistem fonksiyonuna benzer. Tek farkı yeni programa başlamadan önce o an çalışan programı keser.

Formatı : exec (liste);

İlk eleman icra edilecek program

sonrakiler ise argümanlardır. exec (“mail ertan”);exec (“vi”, “dosyam.dat”);program adı da kullanabilirsiniz.

exec sık sık fork ile kullanılır. fork iki prosese ayırdığında child, diğer programı exec kullanarak başlatır.

Daha önce system de bahsedilen buffer işlemleri , exec içinde geçerlidir.

syscall Fonksiyonu :

Bir sistem fonksiyonu çağırır.

syscall (liste);

Ilk argüman araya sokulacak sistem çağrısı, diğerleri bu çağrıya aktarılacak argümanlardır.

(UNIX syscall manual sayfalarını inceleyiniz).

syscall kullanımında perl’in syscall.ph başlık dosyası dahil edilmelidir.

[Ör: require (“syscall.ph”)]

PROGRAM veya PROSES BİTİRME

die, warn, exit, kill

die ve warn Fonksiyonları :

Programlardaki önemli mesajları, gönderme fonksiyonlarıdır.

die fonksiyonu programı sonlandırır ve bir hata mesajı verir (standart error dosyasına )

die (mesaj);

warn’da die gibidir. Yalnız programı sonlandırmaz, icra devam eder.

Örnek :

warn(“UYARI!n”); UYARI! (standart error dosyasına yazar) exit Fonksiyonu : Programı sonlandırır. exit (dönüş kodu)

Geçirilecek dönüş kodu exit(2); #2 kodu ile programı bitirir. kill Fonksiyonu : kill (sinyal, proseslistesi);

nümerik sinyal proses ID Listesi (fork ile döndürülen child proses ID gibi)

  • detaylar için UNIX’de kill komutuna bakınız.

sleep Fonksiyonu : Bu fonksiyon verilen saniye sayısı kadar programı bekletir.

sleep (time);

sn cinsinden sayı

sleep(5); (5 sn bekletir)

wait ve waitpid Fonksiyonları :

wait fonksiyonu icrayı devreder ve child prosesin sonlanmasını belirler(fork ile yaratılan proses gibi). Bu fonksiyon argümansızdır.

proses_id = wait();

Burada child proses sonlanınca wait, proses ID’yi proses_id ‘ye atar. (Sonlanan prosesin ID’si. Eğer proses yoksa dönüş değeri –1 olur.)

waitpit ise üzerinde çalışmak istenilen child proses için bekler.

waitpid (proses_id, waitflag);

 

proses ID özel bekleme flag’ı default’u 0’dır(normal bekleme).

beklenecek proses

Eğer 1 dönerse proses bulundu, -1 dönerse bulunmadı demektir.

Örnek :

#!/usr/local/bin/perl$prosesid = fork();if ($prosesid == 0) {# burası child proses kısmıprint (“Basılan ilk satırn”);exit(0);} else {# burası parent proses kısmı, $prosesid içine child prosesin ID’sini döndürür.waitpid ($prosesid, 0);print (“Basılan sonraki satırn”);}

Çalışması : program.pl

Basılan ilk satırBasılan sonraki satırNot : $$ sistem değişkeni, çalışan programın proses ID’sini tutar.

chroot Fonksiyonu : Bu fonksiyon root dizini tanımlar.

chroot (dir); yeni root DIR chroot (“/u/public”);

burası yeni root DIR’ı olur. local Fonksiyonu : Bunu alt program dersinde görmüştük.Matematiksel FonksiyonlarSin, cos, atan2, sqrt, exp, log, abs, rand, srand sin(değer);cos(değer);atan2(değer1, değer2);sqrt(değer);

pozitif exp(değer)

üs log(değer);abs(değer); Örnek: $sonuç=$abs(-3.5); #İçeriği 3.5’dir. rand(deger) #0 ile değer(int) arası sayı üretir.Üretilen değer float point’dır. srand (değer); #rand fonksiyonu kullanarak random sayı üretimine başlatır. String Yönetme Fonksiyonları 1. String’de, alt string arama2. String yaratma3. String içine sub string (alt string) yerleştirme işlevlerini göreceğiz index Fonksiyonu : String içinde ,soldan başlayarak verilen örneği (substringi) arar.Bulduğunda kaçıncı karakterde olduğu bilgisini(pozisyonu) elde eder. pozisyon=index(string, substring);substring, stringde bulunursa, kaçıncı karakter olduğunu ifade eden rakam, pozisyon değişkenine atılır bulunamazsa –1 atılır.

Örnek :

#!/usr/local/bin/perl$oku = ;$pozisyon = index($oku, “tan”);if ($pozisyon >= 0) { print (“tan sözcüğününün bulunduğu pozisyon: $pozisyon n”);} else { print (“tan sözcüğü bulunamadı n”);}

Çalışması : program.pl

Benim adım Ertan TURKMENtan sözcüğününün bulunduğu pozisyon: 13 index 3 argümanlı da tanımlanabilir. 3. argüman substring’in aranmasına kaç karakter atlandıktan sonra başlanacağını belirler. $position = index($oku, “tan”, 5);

Aytaç Kalıncı – Sabit ve Değişkenler

2- SABİT VE DEĞİŞKENLER 1.Sabitler A)Sayısal Sabitler: Sayısal sabitler,programın çalışması esnasında gereken sayısal sabit değerlerdir. Perl 8 ve 16 tabanlısayısal değerlerin kullanımını da sağlar. 1245 100.45 .000034 043 0x23 …gibi B)String Sabitler: String sabitler,programın çalışması esnasında gereken alfasayısal sabit değerlerdir. Alfabetik veAlfabetik/sayısal/özelkarakter karışımı olabilirler. Tırnak içindeki ifadelerdir.Perl stringlerde; Tek, çift, geri tırnak kullanır. Bunlar birlikte de kullanılabilirler.Kurallarını göreceğiz. Örnek:‘Ertan Türkmen’“Ertan Türkmen”“Dedi ki, “O Ankara’dan geldi.””‘Ahmet Trabzon’ludur’ …gibi stringlerde EscapeSequence denilen özel işlevli karakterlerde kullanılır. Escape SequeNCe karakterlerinden bazıları ve anlamları: a Alarm b Backspace -geri- e Escape -çıkış- f Form Feed –form beslemen Newline –yeni satır- r Carriage return -satır sonut Tab – x karakter atla – v Vertical Tab – dikey atla ilerleyen derslerde konuyla ilgili örnekler görecek ve daha iyi anlayacağız. 2.Değişkenler a)Skalar değişkenler : İçersinde değişebilen değerler bulunduran birimlerdir. İlk karakteri $ işaretidir.Bu karakterden sonra en az 1alfabetik karakter bulunmalıdır. Değişken adında kural olarak bu karakterlerden hemen sonra alfabetik, sayısal karakterler ve _ karakteri kullanılabilir. Değişken uzunluğu serbesttir. Örneğin; $ad, $ad_soyad, $a1 gibi değişken adlari geçerli olup aşağıdakiler geçersizdir. ad # $ karakteri olmadığından $ # $ dan sonra en az 1 alfabetik karakter gerektiğinden $47x # 2.karakter sayısal olamaz $_ad # 2.karakter alfabetik olmalı $ad! # ! karakteri kullanılamaz Not : Küçük ve büyük harf kullanımı önemlidir ve farklı değişkenleri temsil ederler. Bu demektir ki; $AD ile $Ad ve $ad farklıdeğişkenlerdir. Değişkenlere değer atama:Eşitliğin bize göre sağındaki değer (sayısal/alfabetik/karışık olabilir) solundaki değişkenin içine konur. Aşağıdaki ifadeyi inceleyiniz. $ADI_SOYADI = “Ertan TURKMEN”;$ADI_SOYADI değişkeni içindeki değer “Ertan TURKMEN” dir.benzer şekilde,$MAAS = 125000;$MAAS değişkeni içeriği 125000 dir. Not : Değişkenin içinde önceden bir değer varsa,önceki değer silinir, son atanan değer geçerli olur. Aritmetik Operatörler: Perl de kullanılan TEMEL aritmetik operatörler;Toplama +Çıkartma –Çarpma *Bölme / dir. Örnek program : Verilen değerin Km ve Mil cinsinden çevirimini yapar.Adı milkm.pl olsun. #!/usr/local/bin/perlprint (“Mesafeyi giriniz: n”);$mesafe = ;chop ($mesafe); # chop fonksiyonu giriş sonundaki karakteri atar# programımızda son karakter Enter tuşuna bastığımız için# yeni satır (n) karakteri# olduğundan onu atar(siler). $mil = $mesafe * 0.6214;$km = $mesafe * 1.609;print ($mesafe, ” km = “, $mil, ” miln”);print ($mesafe, ” mil = “, $km, ” kmn”); Not : Program satırlarında kullanılan “n” göstergesi alt satıra geçişi sağlayan yeni satır karakteridir. Çalışması: >milkm >Mesafeyi giriniz: >10 >10 km = 6.2139999999999995 mil >10 mil = 16.09 km > a.1)Tamsayi (integer) Skalar değişkenler: İçerisinde tamsayı sabit ve literal bulundurabilirler. integerlar kayar noktalı (floating-point–birazdan inceleyeceğiz–)değerler gibiişlem görürler. Örnek program: adı prg.pl olsun… #!/usr/local/bin/perl$deger = 1234567890;print (“1.değer: “, $deger, “n”);$deger = 1234567890123456;print (“2.değer: “, $deger, “n”);$deger = 12345678901234567890;print (“3.değer: “, $deger, “n”); Çalışması : > prg >1.değer: 1234567890 >2.değer: 1234567890123456 >3.değer: 12345678901234567168 çıktısı verir. Görüldüğü gibi ilk 2 değerde sorun yoktur.3.değer yanlış sonuç üretir. Çünkü tamsayı için fazla değer içermektedir. a.1)Kayar Noktalı (floating-point) Skalar değişkenler: En fazla 16 rakam kabul edebilirler. Bu değişkenler tamsayı, ondalıklı, exponent(e üzeri) ve -/+ işaretli değerleri saklayabilirler. Örneğin, aşağıdaki değerlerle işlem yapabilirler. 11.4 , -275 , -0.3 , .3 , 3. , 5.47e+03 , …v.b. Örnek program : Adı prgsk1.pl olsun, #!/usr/local/bin/perl$deger = 34.0;print (“1. deger “, $deger, “n”);$deger = 114.6e-01;print (“2. deger “, $deger, “n”);$deger = 178.263e+19;print (“3. deger “, $deger, “n”);$deger = 123456789000000000000000000000;print (“4. deger “, $deger, “n”);$deger = 1.23e+999;print (“5. deger “, $deger, “n”);$deger = 1.23e-999;print (“6. deger “, $deger, “n”); Programın Çalışması :> prgsk1.pl> 1. deger 34> 2. deger 11.460000000000001> 3. deger 1.7826300000000001e+21> 4. deger 1.2345678899999999e+29> 5. deger Infinity> 6. deger 0> b)String değişkenler: String (karakter/karakterler içeren dizi) içerirler. Bu değerler alfabetik ve sayısal sabit veya değişken olabilirler. Ör1: $AD_SOYAD = “Ertan TURKMEN”;komutuyla “Ertan TURKMEN” stringi $AD_SOYAD string değişkenine atanır. Ör2: $number = 11;$text = “Bu text sayı içerir.İçerdiği sayı $number.”; komutlarının icrası sonucu $number’a 11 sayısı atanır. $text değişkenine ise “Bu text sayı içerir. İçerdiği sayı $number.” Stringi atanır.Sonuçta $text’in içeriği şudur. “Bu text sayı içerir.İçerdiği sayı 11.” Stringlerde de Escape Sequence karakterler kullanılır. Bunlar aşağıdadır : a Zil sesi b Backspace cn Ctrl+n karakteri e Escape E L, U or Q etkisini sonlandır f Form feed l Sonraki harfi küçüğe çevirir L Sonraki tüm harfleri küçüğe çevirir n newline – Yeni Satırr Carriage return Q Özel örnek karakterleri aramat Tab u Sonraki harfi büyüğe çevirU Sonraki tüm harfleri büyüğe çevirv vertical tab Tek ve Çift tırnaklı string farkı:Bunu örnekle inceleyelim. Ör1:$string = “Bir stringdir”;$text = “Bu $string”;# $text’in içeriği “Bu Bir stringdir” Ör2:$text = ‘Bu bir $string’; #$text’in içeriği ‘Bu bir $string’ İki örnek arasında fark açıkça görülmektedir. Tek tırnak içindeki string aynen saklanır. Değişken ve hatta n gibi karakterlerde kendiözelliklerini icra eder şekilde kullanılamaz. (sadece ve ‘ karakterleri hariç) Ör3:$text = ‘Bu string.n’;$text içeriği: Bu string .n şeklindedir. Ör4:$text = ‘Burada ‘, tek tırnak karakteri var’;$text içeriği: Burada ‘, tek tırnak karakteri var Ör5:$text = ‘Stringin son karakteri backslash \’;$text içeriği: Stringin son karakteri backslash şeklindedir. String ve Sayısal değerlerde değiştirilebilirlik: Örnekle inceleyelim.$string = “43”;$Sayı = 28;$result = $string + $Sayı;$result içeriği 71 dir. Bir de şu örneği inceleyelim:$number = ; #klavyeden giriş bekler 22 girdik diyelim # $number içeriği 22n dir (n enter tusu)chop ($number); # $number içeriği su anda 22$result = $number + 1; #$result içeriği 23 Şöyle bir atama sonucunda ise :$result = “hello” * 5; $result içeriği 0 dır.çünkü hello sayısal olmadığı için sayısal değeri 0 dır Eğer string ifadede sayısal ve alfabetik değer varsa, $result = “12o34”; gibi.. Bu durumda ortadaki oharfi öncesi geçerlidir. $result içeriği 12’dir.

ALTERNATİF STRİNG AYRAÇLARI

Aşağıdaki örneğe bakalım;

$say = 5;

print (“$sayn”); # 5 basar

print (‘$sayn’); # $varn basar

örnekte ‘ ve ” ayraçlarını görüyoruz. Perl başka ayraç elemanları da sunar.

Bu işlev için, q kullanıp sonraki ayraç elemanını belirleyebiliriz.

q!merhaba $kim! gibi…

bu ifade ile aşağıdaki ifade aynıdır.

‘merhaba $kim’

String sınırlayıcı olarak qq kullanırız.

qq/This string contains $var./

Burada / karakteri stringi ayırır(sınırlar).

Stringi kelimelere ayırma-kesme- işlevini qw ile yaparız.

Aşağıdaki iki satır aynıdır.

@kelimeler = qw/Bu bir cümledir/;

@kelimeler = split(‘ ‘, q/Bu bir cümledir/);

her iki durumda da @kelimeler ‘ e şu liste atanır;

(“Bu “, ” bir “, ” cümledir”)

<< KULLANARAK STRİNG TANIMLAMA

<< işareti ile string başı tanımlanır. Bu string boş satır görene kadar devam eder.

Örnek:

$A = <<

here is the string

bu ikinci satır } $A içeriği yandaki ilk iki satırdır.

üçüncü satır

dördüncü satır

<< sonra konacak string, string sonunu belirler.

Örnek:

$str = < (veya şu şekilde <<‘END’ )

bu birinci satır

bu ikinci satır

END (string sonu)

Şu da doğrudur.

$end = “END”;

$str = <<“$end”

bu ilk satır

bu ikinci satır

END

Şu kullanıma bakın;

print <

Merhaba!

Iyi calışmalar!

END

çıktısı

Merhaba!

Iyi calışmalar!

print <

Merhaba!

END

Çıktısı

Aytaç Kalıncı – Perl Giriş

1.GİRİŞ Perl Komutları Nasıl Yazılır? Beğendiğiniz bir editörle yazabilirsiniz. İlk satırda perl’un icra edilebilir dosyasının sistemdeki tam yolu verilir. Satırın başına( #! ) özel karakterleri mutlaka yazılmalıdır. Örnek : #!/usr/bin/perl gibi… Kodlama bittikten sonra editörden çıkılır ve Unix ve benzeri sistemlerde o dosyaya icra hakkı vermeniz gerekir. Varsayalım ki program adı deneme.pl olsun; chmod +x deneme.pl komutu bu işlemi yerine getirir. Program Nasıl Çalışır? Komut satırından program adını girip Enter tuşuna basınız. Örnek : deneme.pl Örnek program : #!/usr/local/bin/perl $girilensatir = ; print($girilensatir); Bu programın ilk satırında programın icrası için gereken dosyanın yeri belirtilmiştir. İkinci satırda klavyeden girilen değer $girilensatir değişkenine aktarılır. (Burada klavyeden merhaba yazalım). Üçüncü satırda ise bu değer ekrana yazdırılır. Ekrandaki görüntü şu şekildedir: > deneme.pl > merhaba > merhaba Açıklama satırları nasıl belirtilir. Açıklama yapmak amacıyla kullanacağımız satırların başına # işaretikoyarız. Örnek : # bu bir açıklama satırıdır# perl tarafından dikkate alınmaz Bu durumda önceki programımızı şu şekilde kodlayalım; #!/usr/local/bin/perl #Bu program klavyeden girileni#ekrana yazar.$girilensatir = ;print($girilensatir); Programın çalışması bir önceki ile tamamen aynıdır. # ile başlayan satırlar sadece bizi aydınlatmak,not tutmak içindir. Perl bu satırları değerlendirmeden geçer. Şimdi şu satırı ele alalım;$girilensatir = ; Bu satir bir perl ifadesidir(statement) her bir parçasına($girilensatir,=,,;) ise gösterge(token) denir. $girilensatir bir skalar değişkeni belirtir. $ isareti değişkenin skalar olduğunugirilensatir ise değişkenin adını belirler. = göstergesi kendisinin (bize göre) sağındaki ifadeyisolundakine ata anlamı taşır. standart giriş elemanını yani klavyeden girişi ifade eder. Son olarak ; göstergesi ise ifadenin bitişini gösterir ve ifade sonlarında mutlaka bulunmalıdır aksitakdirde hata mesajı alırsınız. Yukarıdaki açıklamalar tüm perl benzer ifadelerinde geçerlidir. Yazım sırasında istisnai durumlardışında karakter aralarında boşluk, tab v.b whitespaces karakterleri kullanılabilir.Aralardaki boşluksayısı önemli değildir. Gelelim yazdırmaya;Standart çıktı(ekran)ya yazdırma görevini print yapar. print($girilensatir); ifadesiyle $girilensatirskalar değiskeninin içeriği ekrana yazdırılır. Aslında print fonksiyon olarak çalışır. $girilensatir ‘ı isearguman olarak kullanır. Arguman 1 den fazlada olabilir. Print ($girilensatir, $girilensatir);ifadesinde 2 arguman kullanılmıştır. Her ikisi de klavye girişini alan $girilensatir değişkenidir. Bu durumda busatırın çalışması anında $girilensatir değeri, ekrana 2 defa yazdırılır.

Sayfanın Kaynak Kodu : (Uygulamaları denemek için gerekebilir:)
xmlns:o=”urn:schemas-microsoft-com:office:office”
xmlns:w=”urn:schemas-microsoft-com:office:word”
xmlns=”http://www.w3.org/TR/REC-html40″&gt;

1.GİRİŞ
style=’text-align:justify’>Perl Komutları Nasıl Yazılır?
style=’font-family:Tahoma;color:maroon’>
style=’text-align:justify’>
style=’text-align:justify’>Beğendiğiniz bir editörle yazabilirsiniz. İlk satırda perl’un icra edilebilir dosyasının sistemdeki tam yolu
style=’text-align:justify’>verilir. Satırın başına( #! ) özel karakterleri mutlaka yazılmalıdır.
style=’margin-left:35.4pt;text-align:justify’>
style=’text-align:justify’>Örnek :
style=’font-family:Tahoma’> #!/usr/bin/perl gibi…
style=’text-align:justify’>
style=’text-align:justify’>Kodlama bittikten sonra editörden çıkılır ve Unix ve benzeri sistemlerde o dosyaya icra hakkı vermeniz
style=’text-align:justify’> gerekir. Varsayalım ki program adı deneme.pl olsun;
style=’text-align:justify’>
style=’text-align:justify’>chmod +x deneme.pl
style=’font-family:Tahoma’> komutu bu işlemi yerine getirir.
style=’text-align:justify’>
style=’text-align:justify’>Program Nasıl Çalışır?
style=’text-align:justify’>
style=’text-align:justify’>Komut satırından program adını girip Enter tuşuna basınız.
style=’text-align:justify’>
style=’text-align:justify’>Örnek :
style=’font-family:Tahoma’>deneme.pl

style=’text-align:justify’>
style=’text-align:justify’>Örnek program :
style=’mso-tab-count:1′> #!/usr/local/bin/perl
style=’text-align:justify’>
style=’mso-tab-count:2′> $girilensatir = ;

style=’text-align:justify’>
style=’mso-tab-count:2′> print($girilensatir);

style=’text-align:justify’>
style=’text-align:justify’>Bu programın ilk satırında programın icrası için gereken dosyanın yeri belirtilmiştir. İkinci satırda
style=’text-align:justify’>klavyeden girilen değer $girilensatir değişkenine aktarılır. (Burada klavyeden merhaba yazalım).
style=’text-align:justify’>Üçüncü satırda ise bu değer ekrana yazdırılır.
style=’text-align:justify’>
style=’text-align:justify’>Ekrandaki görüntü şu şekildedir
style=’font-family:Tahoma’>:
style=’margin-left:35.4pt;text-align:justify’>> deneme.pl
style=’margin-left:35.4pt;text-align:justify’>> merhaba
style=’margin-left:35.4pt;text-align:justify’>> merhaba
style=’text-align:justify’>
style=’text-align:justify’>Açıklama satırları nasıl belirtilir. Açıklama yapmak amacıyla kullanacağımız satırların başına # işareti
style=’text-align:justify’>koyarız.
style=’text-align:justify’>
style=’text-align:justify’>Örnek :
style=’font-family:Tahoma’># bu bir açıklama satırıdır

style=’margin-left:35.4pt;text-align:justify’># perl tarafından dikkate alınmaz
style=’text-align:justify’>
style=’text-align:justify’>Bu durumda önceki programımızı şu şekilde kodlayalım;
style=’text-align:justify’>
style=’margin-left:35.4pt;text-align:justify’>#!/usr/local/bin/perl
style=’margin-left:35.4pt;text-align:justify’>#Bu program klavyeden girileni
style=’margin-left:35.4pt;text-align:justify’>#ekrana yazar.
style=’margin-left:35.4pt;text-align:justify’>$girilensatir = ;
style=’margin-left:35.4pt;text-align:justify’>print($girilensatir);
style=’text-align:justify’>
style=’text-align:justify’>Programın çalışması bir önceki ile tamamen aynıdır. # ile başlayan satırlar sadece bizi aydınlatmak,
style=’text-align:justify’>not tutmak içindir. Perl bu satırları değerlendirmeden geçer.
style=’text-align:justify’>
style=’text-align:justify’>Şimdi şu satırı ele alalım;
style=’text-align:justify’>$girilensatir = ;
style=’text-align:justify’>
style=’text-align:justify’>Bu satir bir perl ifadesidir(statement) her bir parçasına($girilensatir,=,,;) ise gösterge
style=’text-align:justify’>(token) denir. $girilensatir bir skalar değişkeni belirtir.
style=’font-family:Tahoma;color:red’>$ isareti değişkenin skalar olduğunu
style=’text-align:justify’>girilensatir
style=’font-family:Tahoma’> ise değişkenin adını belirler.
style=’font-family:Tahoma;color:red’>= göstergesi kendisinin (bize göre) sağındaki ifadeyi
style=’text-align:justify’>solundakine ata anlamı taşır.
style=’font-family:Tahoma;color:red’>
style=’font-family:Tahoma’> standart giriş elemanını yani klavyeden girişi ifade eder.
style=’text-align:justify’>Son olarak
style=’font-family:Tahoma;color:red’>; göstergesi ise ifadenin bitişini gösterir ve ifade sonlarında mutlaka bulunmalıdır aksi
style=’text-align:justify’>takdirde hata mesajı alırsınız.
style=’text-align:justify’>
style=’text-align:justify’>Yukarıdaki açıklamalar tüm perl benzer ifadelerinde geçerlidir. Yazım sırasında istisnai durumlar
style=’text-align:justify’>dışında karakter aralarında boşluk, tab v.b whitespaces karakterleri kullanılabilir.Aralardaki boşluk
style=’text-align:justify’>sayısı önemli değildir.
style=’text-align:justify’>
style=’text-align:justify’>
style=’text-align:justify’>Gelelim yazdırmaya;
style=’text-align:justify’>Standart çıktı(ekran)ya yazdırma görevini print yapar. print($girilensatir); ifadesiyle $girilensatir
style=’text-align:justify’>skalar değiskeninin içeriği ekrana yazdırılır. Aslında print fonksiyon olarak çalışır. $girilensatir ‘ı ise
style=’text-align:justify’>arguman olarak kullanır. Arguman 1 den fazlada olabilir. Print ($girilensatir, $girilensatir);
style=’text-align:justify’>ifadesinde 2 arguman kullanılmıştır. Her ikisi de klavye girişini alan $girilensatir değişkenidir.
style=’text-align:justify’>Bu durumda busatırın çalışması anında $girilensatir değeri, ekrana 2 defa yazdırılır.
style=’mso-bidi-font-family:”Courier New”‘>
style=’text-align:justify’>