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 
                       ¯
                    integer
Aradaki 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 kullanacaksak
perl –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.7
Tam adı:  sirius.gazi.edu.tr
Diger 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 olarak
perl -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ır
Bu 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.32
ertan NAR         10       57.32
nur TABAK     1023    4700.32
 
 
-n ve –a kullanılarak dosyadan No ve Toplam alanlarını cekip çıkaran ve yazdıran
bir program örneği;
 
#!/usr/local/bin/perl
while ($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ır
ikinci satır
ucuncu satır
 
Perl programımızın adı prog.pl ve içeriği de aşağıdaki kodlama olsun.
 
#!/usr/local/bin/perl -0040
while ($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.