KOMUT SATIRI SEÇENEKLERİ
Bir perl programına seçenek geçirmenin iki yolu vardır.
- Komut satırında
- 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.