Perl - Hızlı Kılavuz

Perl, orijinal olarak metin işleme için geliştirilmiş genel amaçlı bir programlama dilidir ve şimdi sistem yönetimi, web geliştirme, ağ programlama, GUI geliştirme ve daha fazlasını içeren çok çeşitli görevler için kullanılmaktadır.

Perl nedir?

  • Perl istikrarlı, çapraz platform programlama dilidir.

  • Perl resmi olarak bir kısaltma olmasa da, çok az kişi bunu Practical Extraction and Report Language.

  • Kamu ve özel sektördeki görev kritik projelerde kullanılır.

  • Perl, Artistic License veya GNU General Public License (GPL) altında lisanslanan bir Açık Kaynak yazılımıdır .

  • Perl, Larry Wall tarafından yaratıldı.

  • Perl 1.0, 1987'de usenet'in alt.comp.sources için piyasaya sürüldü.

  • Bu öğreticiyi yazarken perl'in en son sürümü 5.16.2 idi.

  • Perl, Oxford İngilizce Sözlüğü'nde listelenmiştir .

PC Magazine, Geliştirme Aracı kategorisinde 1998 Teknik Mükemmeliyet Ödülü için Perl'i finalist ilan etti.

Perl Özellikleri

  • Perl, diğerleri arasında C, awk, sed, sh ve BASIC gibi diğer dillerden en iyi özellikleri alır.

  • Perls veritabanı entegrasyon arayüzü DBI, Oracle, Sybase, Postgres, MySQL ve diğerleri dahil olmak üzere üçüncü taraf veritabanlarını destekler.

  • Perl; HTML, XML ve diğer biçimlendirme dilleriyle çalışır.

  • Perl, Unicode'u destekler.

  • Perl, Y2K uyumludur.

  • Perl hem prosedürel hem de nesne yönelimli programlamayı destekler.

  • Perl, XS veya SWIG aracılığıyla harici C / C ++ kitaplıkları ile arayüzler.

  • Perl genişletilebilir. Comprehensive Perl Archive Network ( CPAN ) tarafından sağlanan 20.000'den fazla üçüncü taraf modülü vardır .

  • Perl yorumlayıcısı diğer sistemlere yerleştirilebilir.

Perl ve Web

  • Perl, metin işleme yetenekleri ve hızlı geliştirme döngüsü nedeniyle en popüler web programlama diliydi.

  • Perl yaygın olarak " İnternetin koli bandı " olarak bilinir .

  • Perl, e-ticaret işlemleri dahil olmak üzere şifrelenmiş Web verilerini işleyebilir.

  • Perl, işlemeyi% 2000'e kadar hızlandırmak için web sunucularına gömülebilir.

  • Perl'in mod_perl'i , Apache web sunucusunun bir Perl yorumlayıcısı yerleştirmesine izin verir.

  • Perl'in DBI paketi, web veritabanı entegrasyonunu kolaylaştırır.

Perl Yorumlanır

Perl yorumlanmış bir dildir, bu da kodunuzun taşınabilir olmayan yürütülebilir bir program oluşturan bir derleme aşaması olmadan çalıştırılabileceği anlamına gelir.

Geleneksel derleyiciler programları makine diline dönüştürür. Bir Perl programını çalıştırdığınızda, önce bir bayt kodunda derlenir ve daha sonra (program çalışırken) makine komutlarına dönüştürülür. Bu nedenle, kabuklar veya Tcl ile tam olarak aynı değildir.strictly ara temsil olmadan yorumlanır.

Ayrıca, doğrudan makineye bağlı bir formatta derlenen çoğu C veya C ++ sürümü gibi değildir. Python , awk ve Emacs .elc dosyalarıyla birlikte arada bir yerdedir.

Perl programlarımızı yazmaya başlamadan önce, Perl ortamımızı nasıl kuracağımızı anlayalım. Perl çok çeşitli platformlarda mevcuttur -

  • Unix (Solaris, Linux, FreeBSD, AIX, HP / UX, SunOS, IRIX vb.)
  • 9x / NT / 2000 / kazanın
  • WinCE
  • Macintosh (PPC, 68K)
  • Solaris (x86, SPARC)
  • OpenVMS
  • Alpha (7.2 ve üstü)
  • Symbian
  • Debian GNU / kFreeBSD
  • MirOS BSD
  • Ve daha fazlası...

Bu, sisteminizin üzerinde Perl kurulu olması daha olasıdır. $ İsteminde aşağıdaki komutu vermeyi deneyin -

$perl -v

Makinenize perl yüklediyseniz, aşağıdaki gibi bir mesaj alacaksınız -

This is perl 5, version 16, subversion 2 (v5.16.2) built for i686-linux

Copyright 1987-2012, Larry Wall

Perl may be copied only under the terms of either the Artistic License or the
GNU General Public License, which may be found in the Perl 5 source kit.

Complete documentation for Perl, including FAQ lists, should be found on
this system using "man perl" or "perldoc perl".  If you have access to the
Internet, point your browser at http://www.perl.org/, the Perl Home Page.

Zaten kurulu perl yoksa, sonraki bölüme geçin.

Perl Kurulumunu Alma

En güncel ve güncel kaynak kodu, ikili dosyalar, belgeler, haberler vb. Perl'in resmi web sitesinde mevcuttur.

Perl Official Website - https://www.perl.org/

Perl belgelerini aşağıdaki siteden indirebilirsiniz.

Perl Documentation Website - https://perldoc.perl.org

Perl'i yükle

Perl dağıtımı çok çeşitli platformlar için mevcuttur. Yalnızca platformunuz için geçerli olan ikili kodu indirmeniz ve Perl'i kurmanız gerekir.

Platformunuz için ikili kod mevcut değilse, kaynak kodunu manuel olarak derlemek için bir C derleyicisine ihtiyacınız vardır. Kaynak kodunu derlemek, kurulumunuzda ihtiyaç duyduğunuz özelliklerin seçimi açısından daha fazla esneklik sunar.

İşte Perl'in çeşitli platformlara kurulmasına hızlı bir bakış.

Unix ve Linux Kurulumu

Perl'i Unix / Linux makinesine kurmanın basit adımları.

  • Bir Web tarayıcısı açın ve şuraya gidin: https://www.perl.org/get.html.

  • Unix / Linux için mevcut olan sıkıştırılmış kaynak kodunu indirmek için bağlantıyı takip edin.

  • İndir perl-5.x.y.tar.gz dosyalayın ve aşağıdaki komutları $ isteminde çalıştırın.

$tar -xzf perl-5.x.y.tar.gz
$cd perl-5.x.y $./Configure -de
$make $make test
$make install

NOTE - Burada $, komutunuzu yazdığınız bir Unix istemidir, bu nedenle yukarıda belirtilen komutları yazarken $ yazmadığınızdan emin olun.

Bu, Perl'i standart bir / usr / local / bin konumuna kuracaktır ve kitaplıkları / usr / local / lib / perlXX'e yüklenir ; burada XX, kullandığınız Perl sürümüdür.

Yayınlandıktan sonra kaynak kodunu derlemek biraz zaman alacaktır. makekomut. Kurulum tamamlandıktan sonra, verebilirsinizperl -vperl kurulumunu kontrol etmek için $ isteminde komut. Her şey yolundaysa, yukarıda gösterdiğimiz gibi bir mesaj gösterecektir.

Windows Kurulumu

Perl'i Windows makinesine kurmanın adımları.

  • Windows'ta Strawberry Perl kurulumu için bağlantıyı takip edin http://strawberryperl.com

  • Kurulumun 32bit veya 64bit sürümünü indirin.

  • İndirilen dosyayı Windows Gezgini'nde çift tıklayarak çalıştırın. Bu, kullanımı gerçekten çok kolay olan Perl kurulum sihirbazını getirir. Sadece varsayılan ayarları kabul edin, kurulum bitene kadar bekleyin ve başlamaya hazırsınız!

Macintosh Kurulumu

Kendi Perl sürümünüzü oluşturmak için, genellikle Mac OS kurulum DVD'leri ile birlikte verilen Apples geliştirici araçlarının bir parçası olan 'make'e ihtiyacınız olacak. Make'i yüklemek için Xcode'un en son sürümüne (şu anda ücretli) ihtiyacınız yoktur.

İşte Perl'i Mac OS X makinesine kurmanın basit adımları.

  • Bir Web tarayıcısı açın ve şuraya gidin: https://www.perl.org/get.html.

  • Mac OS X için mevcut olan sıkıştırılmış kaynak kodunu indirmek için bağlantıyı izleyin.

  • İndir perl-5.x.y.tar.gz dosyalayın ve aşağıdaki komutları $ isteminde çalıştırın.

$tar -xzf perl-5.x.y.tar.gz
$cd perl-5.x.y $./Configure -de
$make $make test
$make install

Bu, Perl'i standart bir / usr / local / bin konumuna kuracaktır ve kitaplıkları / usr / local / lib / perlXX'e yüklenir ; burada XX, kullandığınız Perl sürümüdür.

Perl çalıştırılıyor

Aşağıdakiler Perl'i başlatmanın farklı yollarıdır.

Etkileşimli Tercüman

Girebilirsin perlve komut satırından başlatarak etkileşimli yorumlayıcıda kodlamaya hemen başlayın. Bunu Unix, DOS veya size bir komut satırı yorumlayıcısı veya kabuk penceresi sağlayan başka bir sistemden yapabilirsiniz.

$perl  -e <perl code>           # Unix/Linux

or 

C:>perl -e <perl code>          # Windows/DOS

İşte tüm mevcut komut satırı seçeneklerinin listesi -

Sr.No. Seçenek ve Açıklama
1

-d[:debugger]

Programı hata ayıklayıcı altında çalıştırır

2

-Idirectory

@ INC / # include dizini belirtir

3

-T

Kirlenme kontrollerini etkinleştirir

4

-t

Kirlenme uyarılarını etkinleştirir

5

-U

Güvenli olmayan işlemlere izin verir

6

-w

Birçok yararlı uyarıyı etkinleştirir

7

-W

Tüm uyarıları etkinleştirir

8

-X

Tüm uyarıları devre dışı bırakır

9

-e program

Program olarak gönderilen Perl betiğini çalıştırır

10

file

Belirli bir dosyadan Perl betiğini çalıştırır

Komut satırından komut dosyası

Perl betiği, içinde perl kodunu tutan bir metin dosyasıdır ve aşağıdaki gibi uygulamanızda yorumlayıcıyı çağırarak komut satırında çalıştırılabilir -

$perl  script.pl          # Unix/Linux

or 

C:>perl script.pl         # Windows/DOS

Entegre geliştirme ortamı

Perl'i bir grafik kullanıcı arabirimi (GUI) ortamından da çalıştırabilirsiniz. Tek ihtiyacınız olan, sisteminizde Perl'i destekleyen bir GUI uygulamasıdır. Perl IDE olan Padre'yi indirebilirsiniz . Eclipse'e aşina iseniz, Eclipse Eklentisi EPIC - Perl Editor ve IDE for Eclipse'i de kullanabilirsiniz .

Sonraki bölüme geçmeden önce, ortamınızın doğru kurulduğundan ve mükemmel şekilde çalıştığından emin olun. Ortamı düzgün bir şekilde ayarlayamıyorsanız, sistem yöneticinizden yardım alabilirsiniz.

Sonraki bölümlerde verilen tüm örnekler, Linux'un CentOS çeşidinde bulunan v5.16.2 sürümü ile yürütülmüştür.

Perl birçok dilden sözdizimi ve kavramlar ödünç alır: awk, sed, C, Bourne Shell, Smalltalk, Lisp ve hatta İngilizce. Bununla birlikte, diller arasında bazı kesin farklılıklar vardır. Bu bölüm, Perl'de beklenen sözdizimi konusunda sizi hızlı bir şekilde hızlandırmak için tasarlanmıştır.

Bir Perl programı, yukarıdan aşağıya doğru çalışan bir dizi bildirim ve ifadeden oluşur. Döngüler, alt yordamlar ve diğer denetim yapıları, kod içinde atlamanıza izin verir. Her basit ifade noktalı virgül (;) ile bitmelidir.

Perl serbest biçimli bir dildir: Dilediğiniz gibi biçimlendirebilir ve girintileyebilirsiniz. Whitespace, sözdiziminin önemli bir parçası olduğu Python veya önemsiz olduğu Fortran gibi dillerin aksine çoğunlukla belirteçleri ayırmaya hizmet eder.

İlk Perl Programı

Etkileşimli Mod Programlama

Perl yorumlayıcısını şununla kullanabilirsiniz: -ekomut satırındaki seçenek, Perl ifadelerini komut satırından çalıştırmanıza izin verir. $ İstemi için aşağıdaki gibi bir şey deneyelim -

$perl -e 'print "Hello World\n"'

Bu yürütme aşağıdaki sonucu verecektir -

Hello, world

Komut Dosyası Modu Programlama

Zaten $ istemi üzerinde olduğunuzu varsayarak, vi veya vim editörü kullanarak bir metin dosyası hello.pl açalım ve aşağıdaki satırları dosyanızın içine koyalım.

#!/usr/bin/perl

# This will print "Hello, World"
print "Hello, world\n";

Buraya /usr/bin/perlgerçekte perl yorumlayıcı ikilisidir. Komut dosyanızı çalıştırmadan önce, komut dosyası dosyasının modunu değiştirdiğinizden ve yürütme ayrıcalığı verdiğinizden emin olun, genellikle 0755 ayarı mükemmel çalışır ve son olarak yukarıdaki komut dosyasını aşağıdaki gibi çalıştırırsınız -

$chmod 0755 hello.pl $./hello.pl

Bu yürütme aşağıdaki sonucu verecektir -

Hello, world

Parantezleri fonksiyon argümanları için kullanabilir veya kişisel zevkinize göre atlayabilirsiniz. Öncelik konularını açıklığa kavuşturmak için yalnızca ara sıra istenir. Aşağıdaki iki ifade aynı sonucu verir.

print("Hello, world\n");
print "Hello, world\n";

Perl Dosya Uzantısı

Herhangi bir normal basit metin düzenleme programının içinde bir Perl betiği oluşturulabilir. Her tür platform için kullanılabilen çeşitli programlar vardır. Web'den indirilebilecek programcılar için tasarlanmış birçok program vardır.

Bir Perl kuralı olarak, bir Perl dosyasının işleyen bir Perl betiği olarak tanınması için .pl veya .PL dosya uzantısıyla kaydedilmesi gerekir. Dosya adları sayılar, semboller ve harfler içerebilir ancak boşluk içermemelidir. Boşluk yerlerinde alt çizgi (_) kullanın.

Perl'deki Yorumlar

Herhangi bir programlama dilindeki yorumlar geliştiricilerin arkadaşlarıdır. Yorumlar, programı kullanıcı dostu hale getirmek için kullanılabilir ve yorumlayıcı tarafından kod işlevselliğini etkilemeden atlanabilir. Örneğin, yukarıdaki programda hash ile başlayan bir satır# bir yorumdur.

Basitçe Perl'deki yorumların bir hash sembolüyle başladığını ve satırın sonuna kadar koştuğunu söylemek -

# This is a comment in perl

= İle başlayan satırlar, gömülü dokümantasyonun (pod) bir bölümünün başlangıcı olarak yorumlanır ve sonraki = cut'a kadar sonraki tüm satırlar derleyici tarafından yok sayılır. Örnek aşağıdadır -

#!/usr/bin/perl

# This is a single line comment
print "Hello, world\n";

=begin comment
This is all part of multiline comment.
You can use as many lines as you like
These comments will be ignored by the 
compiler until the next =cut is encountered.
=cut

Bu, aşağıdaki sonucu verecektir -

Hello, world

Perl'deki beyaz boşluklar

Perl programı boşlukları önemsemez. Aşağıdaki program mükemmel çalışıyor -

#!/usr/bin/perl

print       "Hello, world\n";

Ancak, alıntılanan dizelerin içinde boşluklar varsa, oldukları gibi yazdırılırlar. Örneğin -

#!/usr/bin/perl

# This would print with a line break in the middle
print "Hello
          world\n";

Bu, aşağıdaki sonucu verecektir -

Hello
          world

Boşluklar, sekmeler, satırsonları vb. Tüm boşluk türleri, tırnak işaretleri dışında kullanıldıklarında yorumlayıcı için eşdeğerdir. Yalnızca beyaz boşluk içeren ve muhtemelen yorum içeren bir satır boş satır olarak bilinir ve Perl bunu tamamen yok sayar.

Perl'de Tekli ve Çiftli Alıntılar

Değişmez dizelerin etrafında çift tırnak veya tek tırnak işaretleri aşağıdaki gibi kullanabilirsiniz -

#!/usr/bin/perl

print "Hello, world\n";
print 'Hello, world\n';

Bu, aşağıdaki sonucu verecektir -

Hello, world
Hello, world\n$

Tekli ve çiftli alıntılarda önemli bir fark vardır. Yalnızca çift tırnakinterpolatedeğişkenler ve satırsonu gibi özel karakterler \ n, tek tırnak ise herhangi bir değişkeni veya özel karakteri enterpolasyon yapmaz. Bir değeri saklamak için değişken olarak $ a kullandığımız ve daha sonra bu değeri yazdırdığımız aşağıdaki örneği kontrol edin -

#!/usr/bin/perl

$a = 10; print "Value of a = $a\n";
print 'Value of a = $a\n';

Bu, aşağıdaki sonucu verecektir -

Value of a = 10
Value of a = $a\n$

"Burada" Belgeler

Çok satırlı metni büyük bir rahatlıkla saklayabilir veya yazdırabilirsiniz. "Buradaki" belgenin içindeki değişkenleri bile kullanabilirsiniz. Aşağıda basit bir sözdizimi verilmiştir, << ile tanımlayıcı arasında boşluk olmamasını dikkatlice kontrol edin.

Bir tanımlayıcı, çıplak bir kelime veya aşağıda EOF kullandığımız gibi alıntılanmış bir metin olabilir. Tanımlayıcı alıntılanmışsa, kullandığınız alıntı türü, tıpkı normal alıntılarda olduğu gibi buradaki docoment içindeki metnin işlenmesini belirler. Tırnaksız bir tanımlayıcı, çift tırnak gibi çalışır.

#!/usr/bin/perl

$a = 10;
$var = <<"EOF"; This is the syntax for here document and it will continue until it encounters a EOF in the first line. This is case of double quote so variable value will be interpolated. For example value of a = $a
EOF
print "$var\n"; $var = <<'EOF';
This is case of single quote so variable value will be 
interpolated. For example value of a = $a EOF print "$var\n";

Bu, aşağıdaki sonucu verecektir -

This is the syntax for here document and it will continue
until it encounters a EOF in the first line.
This is case of double quote so variable value will be
interpolated. For example value of a = 10

This is case of single quote so variable value will be
interpolated. For example value of a = $a

Kaçan Karakterler

Perl, kodumuza müdahale edebilecek her tür karakterden kaçınmak için ters eğik çizgi (\) karakterini kullanır. Çift tırnak ve $ işareti yazdırmak istediğimiz bir örnek alalım -

#!/usr/bin/perl

$result = "This is \"number\""; print "$result\n";
print "\$result\n";

Bu, aşağıdaki sonucu verecektir -

This is "number"
$result

Perl Tanımlayıcıları

Perl tanımlayıcı, bir değişkeni, işlevi, sınıfı, modülü veya başka bir nesneyi tanımlamak için kullanılan bir addır. Bir Perl değişkeni adı $, @ veya% ile başlar ve ardından sıfır veya daha fazla harf, alt çizgi ve rakam (0-9) gelir.

Perl, tanımlayıcılar içinde @, $ ve% gibi noktalama karakterlerine izin vermez. Perl bircase sensitiveProgramlama dili. Böylece$Manpower ve $manpower Perl'de iki farklı tanımlayıcıdır.

Perl gevşek yazılmış bir dildir ve programınızda kullanırken verileriniz için bir tür belirtmenize gerek yoktur. Perl yorumlayıcısı, verinin içeriğine bağlı olarak türü seçecektir.

Perl'in üç temel veri türü vardır: skalarlar, skaler dizileri ve aynı zamanda ilişkisel diziler olarak da bilinen skalarların karmaları. İşte bu veri türleri hakkında küçük bir ayrıntı.

Sr.No. Türler ve Açıklama
1

Scalar

Skalarlar basit değişkenlerdir. Önlerinde dolar işareti ($) bulunur. Skaler bir sayı, dizge veya referanstır. Referans, aslında ilerleyen bölümlerde göreceğimiz bir değişkenin adresidir.

2

Arrays

Diziler, 0 ile başlayan sayısal bir indeksle eriştiğiniz skalarların sıralı listeleridir. Bunların önünde bir "at" işareti (@) bulunur.

3

Hashes

Karmalar, anahtarları aboneler olarak kullanarak eriştiğiniz, sıralanmamış anahtar / değer çifti kümeleridir. Önlerinde bir yüzde işareti (%) bulunur.

Sayısal Değişmezler

Perl, tüm sayıları işaretli tamsayılar veya çift duyarlıklı kayan nokta değerleri olarak dahili olarak depolar. Sayısal değişmez değerler, aşağıdaki kayan nokta veya tam sayı biçimlerinden herhangi birinde belirtilir -

Tür Değer
Tamsayı 1234
Negatif tam sayı -100
Kayan nokta 2000
Bilimsel gösterim 16.12E14
Onaltılık 0xffff
Sekizli 0577

Dize Değişmezleri

Dizeler, karakter dizileridir. Bunlar genellikle tek (') veya çift (") tırnaklarla ayrılmış alfanümerik değerlerdir.Tek tırnaklı dizeleri ve çift tırnaklı dizeleri kullanabileceğiniz UNIX kabuk tırnakları gibi çalışırlar.

Çift tırnaklı dize değişmezleri değişken enterpolasyona izin verirken tek tırnaklı dizeler izin vermez. Ters eğik çizgiyle ilerlediklerinde, özel anlamlara sahip olduklarında ve satırsonu (\ n) veya sekme (\ t) gibi temsil etmek için kullanılan belirli karakterler vardır.

Yeni satırları veya aşağıdaki Kaçış dizilerinden herhangi birini doğrudan çift tırnaklı dizelerinize gömebilirsiniz -

Kaçış dizisi Anlam
\\ Ters eğik çizgi
\ ' Tek alıntı
\ " Çift tırnak
\ a Uyarı veya zil
\ b Geri tuşu
\ f Form besleme
\ n Yeni hat
\ r Satırbaşı
\ t Yatay sekme
\ v Dikey sekme
\ 0nn Sekizli biçimlendirilmiş sayılar oluşturur
\ xnn Hexideciamal formatlı sayılar oluşturur
\ cX Karakterleri kontrol eder, x herhangi bir karakter olabilir
\ u Sonraki karakteri büyük harfe zorlar
\ l Sonraki karakteri küçük harfe zorlar
\ U Aşağıdaki tüm karakterleri büyük harfe zorlar
\ L Aşağıdaki tüm karakterleri küçük harfe zorlar
\ Q Alfasayısal olmayan karakterleri takip eden tüm ters eğik çizgi
\ E End \ U, \ L veya \ Q

Misal

Dizelerin tek tırnak ve çift tırnak ile nasıl davrandığına bir daha bakalım. Burada, yukarıdaki tabloda belirtilen dizge kaçışlarını kullanacağız ve dize değerlerini atamak için skaler değişkeni kullanacağız.

#!/usr/bin/perl

# This is case of interpolation.
$str = "Welcome to \ntutorialspoint.com!";
print "$str\n"; # This is case of non-interpolation. $str = 'Welcome to \ntutorialspoint.com!';
print "$str\n"; # Only W will become upper case. $str = "\uwelcome to tutorialspoint.com!";
print "$str\n"; # Whole line will become capital. $str = "\UWelcome to tutorialspoint.com!";
print "$str\n"; # A portion of line will become capital. $str = "Welcome to \Ututorialspoint\E.com!"; 
print "$str\n"; # Backsalash non alpha-numeric including spaces. $str = "\QWelcome to tutorialspoint's family";
print "$str\n";

Bu, aşağıdaki sonucu verecektir -

Welcome to
tutorialspoint.com!
Welcome to \ntutorialspoint.com!
Welcome to tutorialspoint.com!
WELCOME TO TUTORIALSPOINT.COM!
Welcome to TUTORIALSPOINT.com!
Welcome\ to\ tutorialspoint\'s\ family

Değişkenler, değerleri saklamak için ayrılmış bellek yerleridir. Bu, bir değişken oluşturduğunuzda bellekte biraz yer ayırdığınız anlamına gelir.

Bir değişkenin veri türüne bağlı olarak, yorumlayıcı belleği ayırır ve ayrılmış bellekte nelerin saklanabileceğine karar verir. Bu nedenle, değişkenlere farklı veri türleri atayarak, bu değişkenlerde tamsayıları, ondalık sayıları veya dizeleri saklayabilirsiniz.

Perl'in aşağıdaki üç temel veri türüne sahip olduğunu öğrendik -

  • Scalars
  • Arrays
  • Hashes

Buna göre Perl'de üç tür değişken kullanacağız. Birscalardeğişken bir dolar işaretinden ($) önce gelir ve bir sayı, bir dize veya bir referans saklayabilir. Birarraydeğişken @ işaretinden önce gelir ve sıralı skaler listelerini saklar. Son olarak,Hash değişken% işareti ile başlar ve anahtar / değer çifti kümelerini depolamak için kullanılır.

Perl her değişken türünü ayrı bir ad alanında tutar. Böylece, çatışma korkusu olmadan skaler bir değişken, bir dizi veya bir karma için aynı adı kullanabilirsiniz. Bu, $ foo ve @foo'nun iki farklı değişken olduğu anlamına gelir.

Değişkenler Yaratmak

Perl değişkenlerinin bellek alanı ayırmak için açıkça bildirilmesi gerekmez. Bir değişkene bir değer atadığınızda bildirim otomatik olarak gerçekleşir. Eşittir işareti (=) değişkenlere değer atamak için kullanılır.

Kullanırsak kullanmadan önce bir değişkeni bildirmenin zorunlu olduğunu unutmayın. use strict programımızdaki açıklama.

= Operatörünün solundaki işlenen, değişkenin adıdır ve = operatörünün sağındaki işlenen, değişkende depolanan değerdir. Örneğin -

$age = 25;             # An integer assignment
$name = "John Paul"; # A string $salary = 1445.50;     # A floating point

Burada 25, "John Paul" ve 1445.50 sırasıyla $ age , $ name ve $ maaş değişkenlerine atanan değerlerdir . Kısaca dizilere ve hash'lere nasıl değer atayabileceğimizi göreceğiz.

Skaler Değişkenler

Skaler, tek bir veri birimidir. Bu veriler bir tamsayı, kayan nokta, bir karakter, bir dize, bir paragraf veya bir web sayfasının tamamı olabilir. Basitçe herhangi bir şey olabilir ama tek bir şey olabilir.

İşte skaler değişkenleri kullanmanın basit bir örneği -

#!/usr/bin/perl

$age = 25;             # An integer assignment
$name = "John Paul"; # A string $salary = 1445.50;     # A floating point

print "Age = $age\n"; print "Name = $name\n";
print "Salary = $salary\n";

Bu, aşağıdaki sonucu verecektir -

Age = 25
Name = John Paul
Salary = 1445.5

Dizi Değişkenleri

Dizi, skaler değerlerin sıralı bir listesini saklayan bir değişkendir. Dizi değişkenlerinin önünde bir "at" (@) işareti bulunur. Bir dizinin tek bir öğesine atıfta bulunmak için, değişken adı ve ardından köşeli parantez içindeki öğenin indisi ile dolar işaretini ($) kullanacaksınız.

İşte dizi değişkenlerini kullanmanın basit bir örneği -

#!/usr/bin/perl

@ages = (25, 30, 40);             
@names = ("John Paul", "Lisa", "Kumar");

print "\$ages[0] = $ages[0]\n";
print "\$ages[1] = $ages[1]\n";
print "\$ages[2] = $ages[2]\n";
print "\$names[0] = $names[0]\n";
print "\$names[1] = $names[1]\n";
print "\$names[2] = $names[2]\n";

Burada sadece yazdırmak için $ işaretinden önce kaçış işareti (\) kullandık. Diğer Perl onu bir değişken olarak anlayacak ve değerini basacaktır. Yürütüldüğünde, bu aşağıdaki sonucu verecektir -

$ages[0] = 25
$ages[1] = 30 $ages[2] = 40
$names[0] = John Paul $names[1] = Lisa
$names[2] = Kumar

Hash Değişkenleri

Bir hash, bir dizi key/valueçiftler. Karma değişkenlerin önünde yüzde (%) işareti bulunur. Bir özetin tek bir öğesine başvurmak için, karma değişken adını ve ardından küme parantezlerindeki değerle ilişkili "anahtar" ı kullanacaksınız.

İşte karma değişkenleri kullanmanın basit bir örneği -

#!/usr/bin/perl

%data = ('John Paul', 45, 'Lisa', 30, 'Kumar', 40);

print "\$data{'John Paul'} = $data{'John Paul'}\n"; print "\$data{'Lisa'} = $data{'Lisa'}\n"; print "\$data{'Kumar'} = $data{'Kumar'}\n";

Bu, aşağıdaki sonucu verecektir -

$data{'John Paul'} = 45
$data{'Lisa'} = 30 $data{'Kumar'} = 40

Değişken Bağlam

Perl, aynı değişkeni Bağlama, yani değişkenin kullanıldığı duruma göre farklı şekilde ele alır. Aşağıdaki örneği kontrol edelim -

#!/usr/bin/perl

@names = ('John Paul', 'Lisa', 'Kumar');

@copy = @names;
$size = @names; print "Given names are : @copy\n"; print "Number of names are : $size\n";

Bu, aşağıdaki sonucu verecektir -

Given names are : John Paul Lisa Kumar
Number of names are : 3

Burada @ isimler iki farklı bağlamda kullanılan bir dizidir. İlk önce onu başka bir diziye, yani listeye kopyaladık, böylece içeriğin liste bağlamı olduğunu varsayarak tüm öğeleri döndürdü. Daha sonra aynı diziyi kullandık ve bu diziyi bir skalerde saklamaya çalıştık, bu yüzden bu durumda, bağlamın skaler bağlam olduğunu varsayarak bu dizideki elemanların sayısını döndürdü. Aşağıdaki tablo çeşitli bağlamları listelemektedir -

Sr.No. Bağlam ve Açıklama
1

Scalar

Skaler bir değişkene atama, sağ tarafı skaler bağlamda değerlendirir.

2

List

Bir diziye veya karma atama, bir liste bağlamında sağ tarafı değerlendirir.

3

Boolean

Boole bağlamı, bir ifadenin doğru mu yanlış mı olduğunu görmek için değerlendirildiği herhangi bir yerdir.

4

Void

Bu bağlam sadece dönüş değerinin ne olduğu ile ilgilenmez, hatta bir dönüş değeri bile istemez.

5

Interpolative

Bu bağlam yalnızca tırnak içinde veya tırnak işareti gibi çalışan şeylerde olur.

Skaler, tek bir veri birimidir. Bu veriler bir tamsayı, kayan nokta, bir karakter, bir dize, bir paragraf veya bir web sayfasının tamamı olabilir.

İşte skaler değişkenleri kullanmanın basit bir örneği -

#!/usr/bin/perl

$age = 25; # An integer assignment $name = "John Paul";   # A string 
$salary = 1445.50; # A floating point print "Age = $age\n";
print "Name = $name\n"; print "Salary = $salary\n";

Bu, aşağıdaki sonucu verecektir -

Age = 25
Name = John Paul
Salary = 1445.5

Sayısal Skalerler

Skaler, genellikle bir sayı veya dizedir. Aşağıdaki örnek, çeşitli sayısal skaler türlerinin kullanımını göstermektedir -

#!/usr/bin/perl

$integer = 200; $negative = -300;
$floating = 200.340; $bigfloat = -1.2E-23;

# 377 octal, same as 255 decimal
$octal = 0377; # FF hex, also 255 decimal $hexa = 0xff;

print "integer = $integer\n"; print "negative = $negative\n";
print "floating = $floating\n"; print "bigfloat = $bigfloat\n";
print "octal = $octal\n"; print "hexa = $hexa\n";

Bu, aşağıdaki sonucu verecektir -

integer = 200
negative = -300
floating = 200.34
bigfloat = -1.2e-23
octal = 255
hexa = 255

Dize Skalerleri

Aşağıdaki örnek, çeşitli dizi skalerlerinin kullanımını gösterir. Tek tırnaklı dizeler ile çift tırnaklı dizeler arasındaki farka dikkat edin -

#!/usr/bin/perl

$var = "This is string scalar!"; $quote = 'I m inside single quote - $var'; $double = "This is inside single quote - $var"; $escape = "This example of escape -\tHello, World!";

print "var = $var\n"; print "quote = $quote\n";
print "double = $double\n"; print "escape = $escape\n";

Bu, aşağıdaki sonucu verecektir -

var = This is string scalar!
quote = I m inside single quote - $var
double = This is inside single quote - This is string scalar!
escape = This example of escape -       Hello, World

Skaler İşlemler

Perl'de bulunan çeşitli işleçlerin ayrıntılarını ayrı bir bölümde göreceksiniz, ancak burada birkaç sayısal ve dizgi işlemini listeleyeceğiz.

#!/usr/bin/perl

$str = "hello" . "world";       # Concatenates strings.
$num = 5 + 10; # adds two numbers. $mul = 4 * 5;                   # multiplies two numbers.
$mix = $str . $num; # concatenates string and number. print "str = $str\n";
print "num = $num\n"; print "mix = $mix\n";

Bu, aşağıdaki sonucu verecektir -

str = helloworld
num = 15
mul = 20
mix = helloworld15

Çok Satırlı Dizeler

Programlarınıza çok satırlı dizeler eklemek istiyorsanız, aşağıdaki gibi standart tek tırnak işaretlerini kullanabilirsiniz -

#!/usr/bin/perl

$string = 'This is a multiline string'; print "$string\n";

Bu, aşağıdaki sonucu verecektir -

This is
a multiline
string

"Burada" belge sözdizimini aşağıdaki gibi çoklu satırları saklamak veya yazdırmak için de kullanabilirsiniz -

#!/usr/bin/perl

print <<EOF;
This is
a multiline
string
EOF

Bu da aynı sonucu verecektir -

This is
a multiline
string

V-Dizeleri

V1.20.300.4000 biçimindeki bir değişmez bilgi, belirtilen sıra sayılarına sahip karakterlerden oluşan bir dize olarak ayrıştırılır. Bu form, v dizeleri olarak bilinir.

Bir v-dizesi, "\ x {1} \ x {14} \ x {12c} \ x {fa0}" daha az okunabilir enterpolasyon formunu kullanmak yerine, dizeleri oluşturmak için alternatif ve daha okunabilir bir yol sağlar.

Av ile başlayan ve ardından bir veya daha fazla noktayla ayrılmış öğe gelen herhangi bir değişmezdir. Örneğin -

#!/usr/bin/perl

$smile = v9786; $foo    = v102.111.111;
$martin = v77.97.114.116.105.110; print "smile = $smile\n";
print "foo = $foo\n"; print "martin = $martin\n";

Bu da aynı sonucu verecektir -

smile = ☺
foo = foo
martin = Martin
Wide character in print at main.pl line 7.

Özel Edebiyatlar

Şimdiye kadar dizi skalerleri ve onun birleştirme ve enterpolasyon işlemleri hakkında bir fikriniz olmalı. Öyleyse size üç özel değişmez değerden bahsedeyim __FILE__, __LINE__ ve __PACKAGE__, programınızın o noktasındaki mevcut dosya adını, satır numarasını ve paket adını temsil eder.

Yalnızca ayrı simgeler olarak kullanılabilirler ve dizelere eklenmezler. Aşağıdaki örneği kontrol edin -

#!/usr/bin/perl

print "File name ". __FILE__ . "\n";
print "Line Number " . __LINE__ ."\n";
print "Package " . __PACKAGE__ ."\n";

# they can not be interpolated
print "__FILE__ __LINE__ __PACKAGE__\n";

Bu, aşağıdaki sonucu verecektir -

File name hello.pl
Line Number 4
Package main
__FILE__ __LINE__ __PACKAGE__

Dizi, skaler değerlerin sıralı bir listesini saklayan bir değişkendir. Dizi değişkenlerinin önünde bir "at" (@) işareti bulunur. Bir dizinin tek bir öğesine atıfta bulunmak için, değişken adı ve ardından köşeli parantez içindeki öğenin indisi ile dolar işaretini ($) kullanacaksınız.

İşte dizi değişkenlerini kullanmanın basit bir örneği -

#!/usr/bin/perl

@ages = (25, 30, 40);             
@names = ("John Paul", "Lisa", "Kumar");

print "\$ages[0] = $ages[0]\n"; print "\$ages[1] = $ages[1]\n"; print "\$ages[2] = $ages[2]\n"; print "\$names[0] = $names[0]\n"; print "\$names[1] = $names[1]\n"; print "\$names[2] = $names[2]\n";

Burada, sadece yazdırmak için $ işaretinden önce kaçış işaretini (\) kullandık. Diğer Perl onu bir değişken olarak anlayacak ve değerini basacaktır. Yürütüldüğünde, bu aşağıdaki sonucu verecektir -

$ages[0] = 25 $ages[1] = 30
$ages[2] = 40 $names[0] = John Paul
$names[1] = Lisa $names[2] = Kumar

Perl'de, Liste ve Dizi terimleri genellikle birbirinin yerine kullanılabilirmiş gibi kullanılır. Ancak liste veridir ve dizi değişkendir.

Dizi Oluşturma

Dizi değişkenlerinin önünde @ işareti bulunur ve parantez veya qw operatörü kullanılarak doldurulur. Örneğin -

@array = (1, 2, 'Hello');
@array = qw/This is an array/;

İkinci satır, sınırlandırılmış dizeyi beyaz boşlukla ayırarak bir dizi listesi döndüren qw // operatörünü kullanır. Bu örnekte, bu dört elemanlı bir diziye yol açar; ilk eleman "bu" ve son (dördüncü) "dizi" dir. Bu, aşağıdaki gibi farklı satırlar kullanabileceğiniz anlamına gelir -

@days = qw/Monday
Tuesday
...
Sunday/;

Ayrıca, her bir değeri aşağıdaki gibi ayrı ayrı atayarak bir diziyi doldurabilirsiniz -

$array[0] = 'Monday'; ... $array[6] = 'Sunday';

Dizi Öğelerine Erişim

Bir diziden tek tek öğelere erişirken, değişkenin önüne bir dolar işareti ($) koymalı ve ardından öğe dizinini, değişkenin adından sonra köşeli parantezler içine eklemelisiniz. Örneğin -

#!/usr/bin/perl

@days = qw/Mon Tue Wed Thu Fri Sat Sun/;

print "$days[0]\n";
print "$days[1]\n"; print "$days[2]\n";
print "$days[6]\n"; print "$days[-1]\n";
print "$days[-7]\n";

Bu, aşağıdaki sonucu verecektir -

Mon
Tue
Wed
Sun
Sun
Mon

Dizi indeksleri sıfırdan başlar, bu nedenle ilk elemana erişmek için indeks olarak 0 vermeniz gerekir. Negatif bir dizin de verebilirsiniz, bu durumda öğeyi dizinin başlangıcı yerine sonundan seçersiniz. Bu şu anlama gelir -

print $days[-1]; # outputs Sun
print $days[-7]; # outputs Mon

Sıralı Sayı Dizileri

Perl, sıralı sayılar ve harfler için bir kısayol sunar. Örneğin 100'e kadar sayarken her bir öğeyi yazmak yerine, aşağıdaki gibi bir şey yapabiliriz -

#!/usr/bin/perl

@var_10 = (1..10);
@var_20 = (10..20);
@var_abc = (a..z);

print "@var_10\n";   # Prints number from 1 to 10
print "@var_20\n";   # Prints number from 10 to 20
print "@var_abc\n";  # Prints number from a to z

Burada çift nokta (..) denir range operator. Bu, aşağıdaki sonucu verecektir -

1 2 3 4 5 6 7 8 9 10
10 11 12 13 14 15 16 17 18 19 20
a b c d e f g h i j k l m n o p q r s t u v w x y z

Dizi Boyutu

Bir dizinin boyutu, dizideki skaler bağlam kullanılarak belirlenebilir - döndürülen değer, dizideki öğelerin sayısı olacaktır -

@array = (1,2,3);
print "Size: ",scalar @array,"\n";

Döndürülen değer her zaman dizinin fiziksel boyutu olacaktır, geçerli öğelerin sayısı değil. Bunu gösterebilirsiniz ve bu parçayı kullanarak skalar @array ve $ # array arasındaki fark aşağıdaki gibidir -

#!/usr/bin/perl

@array = (1,2,3);
$array[50] = 4; $size = @array;
$max_index = $#array;

print "Size:  $size\n"; print "Max Index: $max_index\n";

Bu, aşağıdaki sonucu verecektir -

Size: 51
Max Index: 50

Dizide bilgi içeren yalnızca dört öğe vardır, ancak dizi 51 öğe uzunluğundadır ve en yüksek indeksi 50'dir.

Dizide Eleman Ekleme ve Çıkarma

Perl, bir dizideki öğeleri eklemek ve kaldırmak için bir dizi yararlı işlev sağlar. Fonksiyon nedir bir sorunuz olabilir? Şimdiye kadar kullandınprintçeşitli değerleri yazdırmak için işlev. Benzer şekilde, çeşitli başka işlevler için kullanılabilen, bazen alt rutinler adı verilen çeşitli başka işlevler de vardır.

Sr.No. Türler ve Açıklama
1

push @ARRAY, LIST

Listenin değerlerini dizinin sonuna iter.

2

pop @ARRAY

Açılır ve dizinin son değerini döndürür.

3

shift @ARRAY

Dizinin ilk değerini kaydırır ve onu döndürür, diziyi 1 kısaltır ve her şeyi aşağı taşır.

4

unshift @ARRAY, LIST

Listeyi dizinin başına ekler ve yeni dizideki öğelerin sayısını döndürür.

#!/usr/bin/perl

# create a simple array
@coins = ("Quarter","Dime","Nickel");
print "1. \@coins  = @coins\n";

# add one element at the end of the array
push(@coins, "Penny");
print "2. \@coins  = @coins\n";

# add one element at the beginning of the array
unshift(@coins, "Dollar");
print "3. \@coins  = @coins\n";

# remove one element from the last of the array.
pop(@coins);
print "4. \@coins  = @coins\n";

# remove one element from the beginning of the array.
shift(@coins);
print "5. \@coins  = @coins\n";

Bu, aşağıdaki sonucu verecektir -

1. @coins = Quarter Dime Nickel
2. @coins = Quarter Dime Nickel Penny
3. @coins = Dollar Quarter Dime Nickel Penny
4. @coins = Dollar Quarter Dime Nickel
5. @coins = Quarter Dime Nickel

Dizi Öğelerini Dilimleme

Ayrıca, bir diziden bir "dilim" elde edebilirsiniz - yani, başka bir dizi üretmek için bir diziden birden fazla öğe seçebilirsiniz.

#!/usr/bin/perl

@days = qw/Mon Tue Wed Thu Fri Sat Sun/;

@weekdays = @days[3,4,5];

print "@weekdays\n";

Bu, aşağıdaki sonucu verecektir -

Thu Fri Sat

Bir dilim için belirtim, her biri virgülle ayrılmış, pozitif veya negatif geçerli dizinlerin bir listesine sahip olmalıdır. Hız için ayrıca.. menzil operatörü -

#!/usr/bin/perl

@days = qw/Mon Tue Wed Thu Fri Sat Sun/;

@weekdays = @days[3..5];

print "@weekdays\n";

Bu, aşağıdaki sonucu verecektir -

Thu Fri Sat

Dizi Öğelerini Değiştirme

Şimdi, adında bir işlev daha tanıtacağız. splice(), aşağıdaki sözdizimine sahip -

splice @ARRAY, OFFSET [ , LENGTH [ , LIST ] ]

Bu işlev, @ARRAY'in OFFSET ve LENGTH ile belirtilen öğelerini kaldırır ve belirtilmişse bunları LIST ile değiştirir. Son olarak, diziden çıkarılan öğeleri döndürür. Örnek aşağıdadır -

#!/usr/bin/perl

@nums = (1..20);
print "Before - @nums\n";

splice(@nums, 5, 5, 21..25); 
print "After - @nums\n";

Bu, aşağıdaki sonucu verecektir -

Before - 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
After - 1 2 3 4 5 21 22 23 24 25 11 12 13 14 15 16 17 18 19 20

Burada asıl değiştirme 6. sayı ile başlar, ardından beş eleman 6'dan 10'a 21, 22, 23, 24 ve 25 sayıları ile değiştirilir.

Dizeleri Dizilere Dönüştürme

Adlı bir işleve daha bakalım split(), aşağıdaki sözdizimine sahip -

split [ PATTERN [ , EXPR [ , LIMIT ] ] ]

Bu işlev bir dizgeyi bir dizgiye böler ve onu döndürür. LIMIT belirtilirse, en fazla bu sayıda alana bölünür. PATTERN atlanırsa, beyaz boşluğa böler. Örnek aşağıdadır -

#!/usr/bin/perl

# define Strings
$var_string = "Rain-Drops-On-Roses-And-Whiskers-On-Kittens"; $var_names = "Larry,David,Roger,Ken,Michael,Tom";

# transform above strings into arrays.
@string = split('-', $var_string); @names = split(',', $var_names);

print "$string[3]\n"; # This will print Roses print "$names[4]\n";   # This will print Michael

Bu, aşağıdaki sonucu verecektir -

Roses
Michael

Dizileri Dizelere Dönüştür

Kullanabiliriz join()dizi öğelerini yeniden birleştirmek ve bir uzun skaler dizgi oluşturmak için işlev. Bu işlev aşağıdaki sözdizimine sahiptir -

join EXPR, LIST

Bu işlev, LIST'in ayrı dizelerini, EXPR değeriyle ayrılmış alanlara sahip tek bir dizede birleştirir ve dizeyi döndürür. Örnek aşağıdadır -

#!/usr/bin/perl

# define Strings
$var_string = "Rain-Drops-On-Roses-And-Whiskers-On-Kittens"; $var_names = "Larry,David,Roger,Ken,Michael,Tom";

# transform above strings into arrays.
@string = split('-', $var_string); @names = split(',', $var_names);

$string1 = join( '-', @string ); $string2 = join( ',', @names );

print "$string1\n"; print "$string2\n";

Bu, aşağıdaki sonucu verecektir -

Rain-Drops-On-Roses-And-Whiskers-On-Kittens
Larry,David,Roger,Ken,Michael,Tom

Dizileri Sıralama

sort()işlev, bir dizinin her bir öğesini ASCII Sayısal standartlara göre sıralar. Bu işlev aşağıdaki sözdizimine sahiptir -

sort [ SUBROUTINE ] LIST

Bu işlev LIST'i sıralar ve sıralı dizi değerini döndürür. SUBROUTINE belirtilirse, elemanlar sıralanırken SUBTROUTINE içindeki belirtilen mantık uygulanır.

#!/usr/bin/perl

# define an array
@foods = qw(pizza steak chicken burgers);
print "Before: @foods\n";

# sort this array
@foods = sort(@foods);
print "After: @foods\n";

Bu, aşağıdaki sonucu verecektir -

Before: pizza steak chicken burgers
After: burgers chicken pizza steak

Lütfen sıralamanın kelimelerin ASCII Sayısal değerine göre yapıldığını unutmayın. Bu yüzden en iyi seçenek, dizinin her elemanını küçük harflere dönüştürmek ve ardından sıralama işlevini gerçekleştirmektir.

Dizileri Birleştirme

Dizi yalnızca virgülle ayrılmış bir değerler dizisi olduğundan, bunları aşağıda gösterildiği gibi birleştirebilirsiniz -

#!/usr/bin/perl

@numbers = (1,3,(4,5,6));

print "numbers = @numbers\n";

Bu, aşağıdaki sonucu verecektir -

numbers = 1 3 4 5 6

Gömülü diziler aşağıda gösterildiği gibi ana dizinin bir parçası haline gelir -

#!/usr/bin/perl

@odd = (1,3,5);
@even = (2, 4, 6);

@numbers = (@odd, @even);

print "numbers = @numbers\n";

Bu, aşağıdaki sonucu verecektir -

numbers = 1 3 5 2 4 6

Listelerden Eleman Seçme

Liste gösterimi, diziler için olanla aynıdır. Listeye köşeli parantezler ekleyerek ve bir veya daha fazla indeks vererek bir diziden bir öğe çıkarabilirsiniz -

#!/usr/bin/perl

$var = (5,4,3,2,1)[4]; print "value of var = $var\n"

Bu, aşağıdaki sonucu verecektir -

value of var = 1

Benzer şekilde, baştaki @ karakterine gerek kalmasa da dilimleri çıkarabiliriz

#!/usr/bin/perl

@list = (5,4,3,2,1)[1..3];

print "Value of list = @list\n";

Bu, aşağıdaki sonucu verecektir -

Value of list = 4 3 2

Bir hash, bir dizi key/valueçiftler. Karma değişkenlerin önünde yüzde (%) işareti bulunur. Bir karmanın tek bir öğesine atıfta bulunmak için, "$" işareti ve ardından küme parantezlerindeki değerle ilişkili "anahtar" gelen karma değişken adını kullanırsınız.

İşte hash değişkenlerini kullanmanın basit bir örneği -

#!/usr/bin/perl

%data = ('John Paul', 45, 'Lisa', 30, 'Kumar', 40);

print "\$data{'John Paul'} = $data{'John Paul'}\n"; print "\$data{'Lisa'} = $data{'Lisa'}\n"; print "\$data{'Kumar'} = $data{'Kumar'}\n";

Bu, aşağıdaki sonucu verecektir -

$data{'John Paul'} = 45
$data{'Lisa'} = 30 $data{'Kumar'} = 40

Hash Oluşturma

Karmalar aşağıdaki iki yoldan biriyle oluşturulur. İlk yöntemde, adlandırılmış bir anahtara tek tek bir değer atarsınız -

$data{'John Paul'} = 45; $data{'Lisa'} = 30;
$data{'Kumar'} = 40;

İkinci durumda, listeden tek tek çiftler alınarak dönüştürülen bir liste kullanırsınız: çiftin ilk öğesi anahtar olarak ve ikincisi değer olarak kullanılır. Örneğin -

%data = ('John Paul', 45, 'Lisa', 30, 'Kumar', 40);

Netlik sağlamak için, anahtar / değer çiftlerini aşağıdaki gibi belirtmek için => 'yi takma ad olarak kullanabilirsiniz -

%data = ('John Paul' => 45, 'Lisa' => 30, 'Kumar' => 40);

İşte yukarıdaki formun bir çeşidi daha, ona bir göz atın, burada tüm anahtarların önünde kısa çizgi (-) vardır ve bunların etrafında hiçbir alıntı gerekmez -

%data = (-JohnPaul => 45, -Lisa => 30, -Kumar => 40);

Ancak, tek bir kelime olduğunu unutmamak önemlidir, yani, bu hash oluşumunda boşluksuz tuşlar kullanılmıştır ve eğer hashinizi bu şekilde oluşturursanız, o zaman anahtarlara sadece aşağıda gösterildiği gibi kısa çizgi kullanılarak erişilecektir.

$val = %data{-JohnPaul}
$val = %data{-Lisa}

Karma Elemanlara Erişim

Bir hash'den tek tek öğelere erişirken, değişkenin önüne bir dolar işareti ($) koymalı ve ardından öğe anahtarını değişken adından sonra küme parantezleri içinde eklemelisiniz. Örneğin -

#!/usr/bin/perl

%data = ('John Paul' => 45, 'Lisa' => 30, 'Kumar' => 40);

print "$data{'John Paul'}\n"; print "$data{'Lisa'}\n";
print "$data{'Kumar'}\n";

Bu, aşağıdaki sonucu verecektir -

45
30
40

Dilimleri Çıkarma

Bir diziden dilimleri çıkarabildiğiniz gibi, bir karmanın dilimlerini de çıkarabilirsiniz. Değişkenin döndürülen değeri saklaması için @ önekini kullanmanız gerekecek çünkü bunlar bir değer listesi olacak -

#!/uer/bin/perl


%data = (-JohnPaul => 45, -Lisa => 30, -Kumar => 40);

@array = @data{-JohnPaul, -Lisa};

print "Array : @array\n";

Bu, aşağıdaki sonucu verecektir -

Array : 45 30

Anahtarları ve Değerleri Çıkarma

Kullanarak bir hash'deki tüm anahtarların bir listesini alabilirsiniz. keys aşağıdaki sözdizimine sahip işlev -

keys %HASH

Bu işlev, adlandırılmış hash'in tüm anahtarlarının bir dizisini döndürür. Örnek aşağıdadır -

#!/usr/bin/perl 

%data = ('John Paul' => 45, 'Lisa' => 30, 'Kumar' => 40);

@names = keys %data;

print "$names[0]\n";
print "$names[1]\n"; print "$names[2]\n";

Bu, aşağıdaki sonucu verecektir -

Lisa
John Paul
Kumar

Benzer şekilde kullanabilirsiniz valuestüm değerlerin bir listesini almak için işlev. Bu işlev aşağıdaki sözdizimine sahiptir -

values %HASH

Bu işlev, adlandırılmış karmanın tüm değerlerinden oluşan normal bir dizi döndürür. Örnek aşağıdadır -

#!/usr/bin/perl 

%data = ('John Paul' => 45, 'Lisa' => 30, 'Kumar' => 40);

@ages = values %data;

print "$ages[0]\n"; print "$ages[1]\n";
print "$ages[2]\n";

Bu, aşağıdaki sonucu verecektir -

30
45
40

Varlığı Kontrol Etme

Var olmayan bir hash'den bir anahtar / değer çiftine erişmeye çalışırsanız, normalde undefineddeğer ve açık uyarılarınız varsa, çalışma zamanında oluşturulan bir uyarı alırsınız. Bunu kullanarak aşabilirsiniz.exists adlandırılmış anahtar varsa, değerinin ne olabileceğine bakılmaksızın true döndüren işlev -

#!/usr/bin/perl

%data = ('John Paul' => 45, 'Lisa' => 30, 'Kumar' => 40);

if( exists($data{'Lisa'} ) ) {
   print "Lisa is $data{'Lisa'} years old\n";
} else {
   print "I don't know age of Lisa\n";
}

Burada, ayrı bir bölümde çalışacağımız IF ... ELSE ifadesini tanıttık. Şimdilik sadece bunu varsayıyorsunif( condition ) kısım yalnızca verilen koşul doğru olduğunda çalıştırılacaktır, aksi takdirde elsebölüm yürütülecektir. Dolayısıyla, yukarıdaki programı çalıştırdığımızda, aşağıdaki sonucu verir, çünkü burada verilen koşul vardır ($ data {'Lisa'} true -

Lisa is 30 years old

Karma Boyutunu Alma

Anahtarlarda veya değerlerde skaler bağlamı kullanarak boyutu, yani bir karmadaki öğe sayısını elde edebilirsiniz. Basitçe söylemek gerekirse, önce anahtarlardan veya değerlerden oluşan bir dizi almanız gerektiğini ve ardından dizinin boyutunu aşağıdaki gibi elde edebilirsiniz -

#!/usr/bin/perl

%data = ('John Paul' => 45, 'Lisa' => 30, 'Kumar' => 40);

@keys = keys %data;
$size = @keys; print "1 - Hash size: is $size\n";

@values = values %data;
$size = @values; print "2 - Hash size: is $size\n";

Bu, aşağıdaki sonucu verecektir -

1 - Hash size: is 3
2 - Hash size: is 3

Hash'lara Öğe Ekleme ve Kaldırma

Yeni bir anahtar / değer çifti eklemek, basit atama operatörü kullanılarak bir satır kodla yapılabilir. Ancak hash'den bir öğeyi çıkarmak için kullanmanız gerekirdelete örnekte gösterildiği gibi işlev -

#!/usr/bin/perl

%data = ('John Paul' => 45, 'Lisa' => 30, 'Kumar' => 40);
@keys = keys %data;
$size = @keys; print "1 - Hash size: is $size\n";

# adding an element to the hash;
$data{'Ali'} = 55; @keys = keys %data; $size = @keys;
print "2 - Hash size:  is $size\n"; # delete the same element from the hash; delete $data{'Ali'};
@keys = keys %data;
$size = @keys; print "3 - Hash size: is $size\n";

Bu, aşağıdaki sonucu verecektir -

1 - Hash size: is 3
2 - Hash size: is 4
3 - Hash size: is 3

Perl koşullu ifadeler, programcının program tarafından değerlendirilecek veya test edilecek bir veya daha fazla koşulu, koşulun doğru olduğu belirlenirse yürütülecek bir ifade veya ifadeyle birlikte ve isteğe bağlı olarak diğerlerini belirtmesini gerektiren karar vermede yardımcı olur. koşulun yanlış olduğu belirlenirse yürütülecek ifadeler.

Aşağıda, programlama dillerinin çoğunda bulunan tipik bir karar verme yapısının genelidir -

0 sayısı, '0' ve "" dizeleri, boş liste () ve undef hepsi false boole bağlamında ve diğer tüm değerler true. Gerçek bir değerin olumsuzlanması! veya not özel bir yanlış değer döndürür.

Perl programlama dili aşağıdaki koşullu ifadeleri sağlar.

Sr.No. Açıklama ve Açıklama
1 eğer ifadesi

Bir if statement bir boole ifadesinin ardından bir veya daha fazla ifadeden oluşur.

2 if ... else ifadesi

Bir if statement ardından isteğe bağlı bir else statement.

3 if ... elsif ... else ifadesi

Bir if statement ardından isteğe bağlı bir elsif statement ve sonra isteğe bağlı olarak else statement.

4 ifade olmadıkça

Bir unless statement bir boole ifadesinin ardından bir veya daha fazla ifadeden oluşur.

5 sürece ... else ifadesi

Bir unless statement ardından isteğe bağlı bir else statement.

6 if ... elsif..else deyimi

Bir unless statement ardından isteğe bağlı bir elsif statement ve sonra isteğe bağlı olarak else statement.

7 anahtar deyimi

Perl'in en son sürümleri ile, switchBeyan. bu, değişken bir değeri çeşitli koşullarla karşılaştırmanın basit bir yolunu sağlar.

? : Şebeke

Kontrol edelim conditional operator ? :değiştirmek için kullanılabilir if...elseifadeler. Aşağıdaki genel biçime sahiptir -

Exp1 ? Exp2 : Exp3;

Burada Exp1, Exp2 ve Exp3 ifadelerdir. Kolonun kullanımına ve yerleştirilmesine dikkat edin.

A'nın değeri? ifade şu şekilde belirlenir: Exp1 değerlendirilir. Doğruysa, Exp2 değerlendirilir ve tamamının değeri olur? ifade. Exp1 yanlışsa, Exp3 değerlendirilir ve değeri ifadenin değeri olur. Aşağıda bu operatörün kullanıldığı basit bir örnek verilmiştir -

#!/usr/local/bin/perl
 
$name = "Ali"; $age = 10;

$status = ($age > 60 )? "A senior citizen" : "Not a senior citizen";

print "$name is - $status\n";

Bu, aşağıdaki sonucu verecektir -

Ali is - Not a senior citizen

Bir kod bloğunu birkaç kez çalıştırmanız gereken bir durum olabilir. Genel olarak, ifadeler sıralı olarak yürütülür: Bir fonksiyondaki ilk ifade önce çalıştırılır, ardından ikincisi vb.

Programlama dilleri, daha karmaşık yürütme yollarına izin veren çeşitli kontrol yapıları sağlar.

Bir döngü deyimi, bir deyimi veya deyim grubunu birden çok kez yürütmemize olanak tanır ve aşağıdaki programlama dillerinin çoğunda bir döngü deyiminin genel biçimidir -

Perl programlama dili, döngü gereksinimlerini karşılamak için aşağıdaki döngü türlerini sağlar.

Sr.No. Döngü Tipi ve Açıklaması
1 döngü sırasında

Belirli bir koşul doğruyken bir ifadeyi veya ifade grubunu tekrarlar. Döngü gövdesini çalıştırmadan önce koşulu test eder.

2 döngüye kadar

Belirli bir koşul gerçekleşene kadar bir ifadeyi veya ifade grubunu tekrarlar. Döngü gövdesini çalıştırmadan önce koşulu test eder.

3 döngü için

Bir dizi ifadeyi birden çok kez yürütür ve döngü değişkenini yöneten kodu kısaltır.

4 foreach döngüsü

Foreach döngüsü normal bir liste değeri üzerinde yinelenir ve VAR değişkenini sırayla listenin her bir öğesi olacak şekilde ayarlar.

5 döngü sırasında yap

Döngü gövdesinin sonundaki koşulu test etmesi dışında bir while ifadesi gibi

6 İç içe geçmiş döngüler

Döngü while, for veya do.. while döngüsü içinde bir veya daha fazla döngü kullanabilirsiniz.

Döngü Kontrol İfadeleri

Döngü kontrol ifadeleri, yürütmeyi normal sırasından değiştirir. Yürütme bir kapsam bıraktığında, bu kapsamda oluşturulan tüm otomatik nesneler yok edilir.

Perl aşağıdaki kontrol ifadelerini destekler. Ayrıntılarını kontrol etmek için aşağıdaki bağlantıları tıklayın.

Sr.No. Kontrol İfadesi ve Açıklama
1 sonraki ifade

Döngünün vücudunun geri kalanını atlamasına ve yinelemeden önce durumunu hemen yeniden test etmesine neden olur.

2 son ifade

Döngü deyimini sonlandırır ve yürütmeyi döngüden hemen sonra deyime aktarır.

3 devam ifadesi

Devamlı bir BLOK, her zaman koşullu yeniden değerlendirilmek üzere olmasından hemen önce yürütülür.

4 yineleme ifadesi

Yinele komutu, koşulu tekrar değerlendirmeden döngü bloğunu yeniden başlatır. Devam bloğu, varsa, yürütülmez.

5 git beyanı

Perl, üç biçimde bir goto komutunu destekler: goto label, goto expr ve goto & name.

Sonsuz Döngü

Bir koşul asla yanlış olmazsa döngü sonsuz döngü haline gelir. fordöngü geleneksel olarak bu amaç için kullanılır. Üç ifadenin hiçbirifor döngü gereklidir, koşullu ifadeyi boş bırakarak sonsuz bir döngü oluşturabilirsiniz.

#!/usr/local/bin/perl
 
for( ; ; ) {
   printf "This loop will run forever.\n";
}

Ctrl + C tuşlarına basarak yukarıdaki sonsuz döngüyü sonlandırabilirsiniz.

Koşullu ifade olmadığında, doğru olduğu varsayılır. Bir başlatma ve artış ifadesine sahip olabilirsiniz, ancak bir programcı olarak, sonsuz bir döngüyü belirtmek için daha yaygın olarak for (;;) yapısını kullanın.

Operatör nedir?

4 + 5 eşittir 9 ifadesi kullanılarak basit cevap verilebilir . Burada 4 ve 5 operand olarak adlandırılır ve + operatör olarak adlandırılır. Perl dili birçok operatör türünü destekler, ancak aşağıda önemli ve en sık kullanılan operatörlerin listesi verilmiştir:

  • Aritmetik operatörler
  • Eşitlik Operatörleri
  • Mantıksal operatörler
  • Atama Operatörleri
  • Bitsel Operatörler
  • Mantıksal operatörler
  • Teklif Benzeri Operatörler
  • Çeşitli Operatörler

Tüm operatörleri tek tek inceleyelim.

Perl Aritmetik Operatörleri

Değişken varsay $a holds 10 and variable $b 20'yi tutar, ardından Perl aritmatik operatörleri aşağıdadır -

Örnek Göster

Sr.No. Operatör ve Açıklama
1

+ ( Addition )

Operatörün her iki tarafına da değerler ekler

Example - $a + $b 30 verecek

2

- (Subtraction)

Sağ el işleneni sol el işlenenden çıkarır

Example - $a - $b -10 verecek

3

* (Multiplication)

İşlecin her iki tarafındaki değerleri çarpar

Example - $a * $b 200 verecek

4

/ (Division)

Sol el işleneni sağ el işlenene böler

Example - $b / $a 2 verecek

5

% (Modulus)

Sol el işleneni sağ el işlenene böler ve kalanı döndürür

Example - $b % $0 verecek

6

** (Exponent)

Operatörlerde üstel (güç) hesaplama gerçekleştirir

Example - $a**$b, 20'nin kuvvetine 10 verecek

Perl Eşitlik Operatörleri

Bunlara ilişkisel operatörler de denir. Değişken varsay$a holds 10 and variable $b, 20'yi tutar, öyleyse aşağıdaki sayısal eşitlik operatörlerini kontrol edelim -

Örnek Göster

Sr.No. Operatör ve Açıklama
1

== (equal to)

İki işlenenin değerinin eşit olup olmadığını kontrol eder, evet ise koşul doğru olur.

Example - ($a == $b) doğru değil.

2

!= (not equal to)

İki işlenenin değerinin eşit olup olmadığını kontrol eder, değerler eşit değilse koşul doğru olur.

Example - ($a != $b) doğrudur.

3

<=>

İki işlenen değerinin eşit olup olmadığını kontrol eder ve soldaki bağımsız değişkenin sayısal olarak sağ bağımsız değişkenden küçük, ona eşit veya daha büyük olmasına bağlı olarak -1, 0 veya 1 döndürür.

Example - ($a <=> $b) -1 döndürür.

4

> (greater than)

Soldaki işlenenin değerinin sağ işlenenin değerinden büyük olup olmadığını kontrol eder, evet ise koşul doğru olur.

Example - ($a > $b) doğru değil.

5

< (less than)

Soldaki işlenenin değerinin sağ işlenenin değerinden küçük olup olmadığını kontrol eder, evet ise koşul doğru olur.

Example - ($a < $b) doğrudur.

6

>= (greater than or equal to)

Sol işlenenin değerinin sağ işlenenin değerinden büyük veya ona eşit olup olmadığını kontrol eder, evet ise koşul doğru olur.

Example - ($a >= $b) doğru değil.

7

<= (less than or equal to)

Sol işlenenin değerinin sağ işlenenin değerinden küçük veya ona eşit olup olmadığını kontrol eder, evet ise koşul doğru olur.

Example - ($a <= $b) doğrudur.

Aşağıda hisse senedi operatörlerinin bir listesi bulunmaktadır. Değişken varsay$a holds "abc" and variable $b, "xyz" tutar, sonra aşağıdaki dize eşitliği operatörlerini kontrol edelim -

Örnek Göster

Sr.No. Operatör ve Açıklama
1

lt

Soldaki bağımsız değişken, sağdaki bağımsız değişkenden dize olarak daha küçükse doğru döndürür.

Example - ($a lt $b) doğrudur.

2

gt

Soldaki bağımsız değişken sağdaki bağımsız değişkenden dizgesel olarak daha büyükse doğru döndürür.

Example - ($a gt $b) yanlıştır.

3

le

Sol bağımsız değişken sağ bağımsız değişkenden dize olarak küçükse veya ona eşitse doğru döndürür.

Example - ($a le $b) doğrudur.

4

ge

Soldaki bağımsız değişken sağ bağımsız değişkenden dize olarak büyük veya ona eşitse doğru döndürür.

Example - ($a ge $b) yanlıştır.

5

eq

Soldaki bağımsız değişken, sağdaki bağımsız değişkene dizgesel olarak eşitse doğru döndürür.

Example - ($a eq $b) yanlıştır.

6

ne

Soldaki bağımsız değişken dizgesel olarak sağdaki bağımsız değişkene eşit değilse doğru döndürür.

Example - ($a ne $b) doğrudur.

7

cmp

Soldaki bağımsız değişkenin dizisel olarak sağ bağımsız değişkenden küçük, ona eşit veya büyük olmasına bağlı olarak -1, 0 veya 1 döndürür.

Example - ($a cmp $b) -1'dir.

Perl Atama Operatörleri

Değişken varsay $a holds 10 and variable $b 20'yi tutar, ardından aşağıda Perl'de bulunan atama operatörleri ve bunların kullanımı yer almaktadır -

Örnek Göster

Sr.No. Operatör ve Açıklama
1

=

Basit atama operatörü, sağ taraftaki işlenenlerden sol taraftaki işlenenlere değerler atar

Example - $c = $a + $b will assigned value of $a + $b into $c

2

+=

VE atama operatörü ekle, Sol operanda sağ operandı ekler ve sonucu sol operanda atar.

Example - $c += $a eşdeğerdir $c = $c + $ a

3

-=

Çıkar VE atama operatörü, Sağ operandı sol operanddan çıkarır ve sonucu sol operanda atar.

Example - $ c - = $a is equivalent to $c = $c - $a

4

*=

AND atama operatörünü çarpın, sağ operandı sol operand ile çarpar ve sonucu sol operanda atar

Example - $c *= $a eşdeğerdir $c = $c * $ a

5

/=

VE atama operatörünü böl, Sol operandı sağ operandla böler ve sonucu sol operanda atar.

Example - $ c / = $a is equivalent to $c = $c / $a

6

%=

Modül VE atama operatörü, İki işlenen kullanarak modülü alır ve sonucu sol operanda atar

Example - $c %= $a eşdeğerdir $c = $CA

7

**=

Üslü VE atama operatörü, Operatörler üzerinde üstel (güç) hesaplama yapar ve sol operanda değer atar

Example - $c **= $a eşdeğerdir $c = $c ** $ a

Perl Bitsel Operatörleri

Bitsel operatör bitler üzerinde çalışır ve bit işlem gerçekleştirir. $ A = 60; ve $ b = 13; Şimdi ikili formatta aşağıdaki gibi olacaklar -

$ a = 0011 1100

$ b = 0000 1101

-----------------

$ a & $ b = 0000 1100

$ a | $ b = 0011 1101

$ a ^ $ b = 0011 0001

~ $ a = 1100 0011

Perl dili tarafından desteklenen aşağıdaki Bitwise operatörleri vardır. $a = 60; and $b = 13

Örnek Göster

Sr.No. Operatör ve Açıklama
1

&

İkili VE İşleci, her iki işlenende de varsa sonuca bir bit kopyalar.

Example - ($a & $b) 0000 1100 olan 12 verir

2

|

İkili VEYA İşleci, bir işlenende varsa bir bit kopyalar.

Example - ($a | $b) 0011 1101 olan 61 verir

3

^

İkili XOR İşleci, bir işlenen içinde ayarlanmışsa, ancak her ikisinde birden değil ise biti kopyalar.

Example - ($a ^ $b) 0011 0001 olan 49 verir

4

~

İkili Birler Tamamlayıcı Operatörü tekli ve bitleri 'çevirme' etkisine sahiptir.

Example - (~ $ a), işaretli bir ikili sayı nedeniyle 2'nin tamamlayıcı formunda 1100 0011 olan -61 verecektir.

5

<<

İkili Sol Kaydırma Operatörü. Soldaki işlenenler değeri, sağ işlenen tarafından belirtilen bit sayısı kadar sola taşınır.

Example - $ a << 2, 1111 0000 olan 240 değerini verir

6

>>

İkili Sağ Shift Operatörü. Soldaki işlenenler değeri, sağ işlenen tarafından belirtilen bit sayısı kadar sağa taşınır.

Example - $ a >> 2, 0000 1111 olan 15 verir

Perl Mantıksal Operatörleri

Perl dili tarafından desteklenen aşağıdaki mantıksal operatörler vardır. $ A değişkeninin doğru olduğunu ve $ b değişkeninin yanlış olduğunu varsayalım -

Örnek Göster

Sr.No. Operatör ve Açıklama
1

and

Mantıksal AND operatörü çağrıldı. Her iki işlenen de doğruysa, o zaman koşul doğru olur.

Example - ($ a ve $ b) yanlıştır.

2

&&

C-stili Mantıksal AND operatörü, her iki işlenende de varsa sonuca bir bit kopyalar.

Example - ($ a && $ b) yanlıştır.

3

or

Mantıksal VEYA Operatörü çağrıldı. İki işlenenden herhangi biri sıfır değilse, o zaman koşul doğru olur.

Example - ($ a veya $ b) doğrudur.

4

||

C-stili Mantıksal OR operatörü, bir işlenende varsa bir bit kopyalar.

Example - ($ a || $ b) doğru.

5

not

Mantıksal NOT Operatörü olarak adlandırıldı. İşleneninin mantıksal durumunu tersine çevirmek için kullanın. Bir koşul doğruysa, Mantıksal NOT operatörü yanlış yapar.

Example - değil ($ a ve $ b) doğru.

Teklif Benzeri Operatörler

Perl dili tarafından desteklenen aşağıdaki Alıntı benzeri operatörler vardır. Aşağıdaki tabloda, bir {} seçtiğiniz herhangi bir sınırlayıcı çiftini temsil eder.

Örnek Göster

Sr.No. Operatör ve Açıklama
1

q{ }

Tek tırnak işaretli bir dizeyi kapsar

Example - q {abcd} 'abcd' verir

2

qq{ }

Çift tırnak işaretli bir dizeyi kapsar

Example - qq {abcd} "abcd" verir

3

qx{ }

Ters tırnak işaretli bir dizeyi kapsar

Example - qx {abcd} "abcd" verir

Çeşitli Operatörler

Perl dili tarafından desteklenen aşağıdaki çeşitli operatörler vardır. A değişkeninin 10 ve b değişkeninin 20 olduğunu varsayın o zaman -

Örnek Göster

Sr.No. Operatör ve Açıklama
1

.

İkili operatör nokta (.) İki dizeyi birleştirir.

Example - $ a = "abc" ise, $b = "def" then $a. $ b "abcdef" verir

2

x

Yineleme operatörü x, sağ işlenen tarafından belirtilen sayıda yinelenen sol işlenenden oluşan bir dize döndürür.

Example - ('-' x 3) --- verecektir.

3

..

Aralık operatörü .., soldaki değerden sağdaki değere doğru sayarak (bire kadar) değerlerin listesini döndürür

Example - (2..5), (2, 3, 4, 5) verecek

4

++

Otomatik Artış operatörü tam sayı değerini bir artırır

Example - $ a ++ 11 verir

5

--

Otomatik Azaltma operatörü, tam sayı değerini bir azaltır

Example - $ a-- 9 verir

6

->

Ok operatörü çoğunlukla bir nesneden veya bir sınıf adından bir yöntemin veya değişkenin başvurusunu kaldırmak için kullanılır.

Example - $ obj->$a is an example to access variable $a nesnesinden $ obj.

Perl Operatörlerinin Önceliği

Aşağıdaki tablo en yüksek öncelikten en düşüğe doğru tüm operatörleri listeler.

Örnek Göster

left	terms and list operators (leftward)
left	->
nonassoc	++ --
right	**
right	! ~ \ and unary + and -
left	=~ !~
left	* / % x
left	+ - .
left	<< >>
nonassoc	named unary operators
nonassoc	< > <= >= lt gt le ge
nonassoc	== != <=> eq ne cmp ~~
left	&
left	| ^
left	&&
left	|| //
nonassoc	..  ...
right	?:
right	= += -= *= etc.
left	, =>
nonassoc	list operators (rightward)
right	not
left	and
left	or xor

Bu bölüm size Perl'de tarih ve saatleri nasıl işleyeceğiniz ve değiştireceğiniz konusunda temel anlayış verecektir.

Güncel Tarih ve Saat

İle başlayalım localtime()bağımsız değişken verilmezse geçerli tarih ve saat için değerler döndüren işlev. Aşağıda, tarafından döndürülen 9 öğeli liste yer almaktadır.localtime liste bağlamında kullanılırken işlev -

sec,     # seconds of minutes from 0 to 61
min,     # minutes of hour from 0 to 59
hour,    # hours of day from 0 to 24
mday,    # day of month from 1 to 31
mon,     # month of year from 0 to 11
year,    # year since 1900
wday,    # days since sunday
yday,    # days since January 1st
isdst    # hours of daylight savings time

Localtime () işlevi tarafından döndürülen farklı öğeleri yazdırmak için aşağıdaki örneği deneyin -

#!/usr/local/bin/perl
 
@months = qw( Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec );
@days = qw(Sun Mon Tue Wed Thu Fri Sat Sun);

($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime();
print "$mday $months[$mon] $days[$wday]\n";

Yukarıdaki kod çalıştırıldığında, aşağıdaki sonucu verir -

16 Feb Sat

Localtime () işlevini skaler bağlamda kullanacaksanız, sistemde ayarlanan geçerli saat diliminden tarih ve saati döndürür. Geçerli tarih ve saati tam formatta yazdırmak için aşağıdaki örneği deneyin -

#!/usr/local/bin/perl
 
$datestring = localtime();
print "Local date and time $datestring\n";

Yukarıdaki kod çalıştırıldığında, aşağıdaki sonucu verir -

Local date and time Sat Feb 16 06:50:45 2013

GMT Saati

İşlev gmtime()localtime () işlevi gibi çalışır, ancak döndürülen değerler standart Greenwich saat dilimi için yerelleştirilir. Liste bağlamında çağrıldığında, gmtime tarafından döndürülen son değer olan $ isdst her zaman 0'dır. GMT'de Yaz Saati Uygulaması yoktur.

Localtime () komut dosyasını çalıştıran makinedeki geçerli yerel saati döndürecek ve gmtime () evrensel Greenwich Ortalama Zamanını veya GMT'yi (veya UTC) döndürecektir.

Geçerli tarih ve saati GMT ölçeğinde yazdırmak için aşağıdaki örneği deneyin -

#!/usr/local/bin/perl

$datestring = gmtime(); print "GMT date and time $datestring\n";

Yukarıdaki kod çalıştırıldığında, aşağıdaki sonucu verir -

GMT date and time Sat Feb 16 13:50:45 2013

Tarih ve Saati Biçimlendirme

9 öğeli bir liste almak için localtime () işlevini kullanabilir ve daha sonra printf() tarih ve saati gereksinimlerinize göre aşağıdaki gibi biçimlendirme işlevi -

#!/usr/local/bin/perl
 
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(); printf("Time Format - HH:MM:SS\n"); printf("%02d:%02d:%02d", $hour, $min, $sec);

Yukarıdaki kod çalıştırıldığında, aşağıdaki sonucu verir -

Time Format - HH:MM:SS
06:58:52

Dönem zamanı

Zaman () işlevini, Unix'te 1 Ocak 1970'de, belirli bir tarihten itibaren geçen saniye sayısını, yani belirli bir tarihten itibaren geçen saniye sayısını elde etmek için kullanabilirsiniz.

#!/usr/local/bin/perl
 
$epoc = time(); print "Number of seconds since Jan 1, 1970 - $epoc\n";

Yukarıdaki kod çalıştırıldığında, aşağıdaki sonucu verir -

Number of seconds since Jan 1, 1970 - 1361022130

Belirli bir sayıda saniyeyi aşağıdaki gibi tarih ve saat dizesine dönüştürebilirsiniz -

#!/usr/local/bin/perl

$datestring = localtime(); print "Current date and time $datestring\n";

$epoc = time(); $epoc = $epoc - 24 * 60 * 60; # one day before of current date. $datestring = localtime($epoc); print "Yesterday's date and time $datestring\n";

Yukarıdaki kod çalıştırıldığında, aşağıdaki sonucu verir -

Current date and time Tue Jun  5 05:54:43 2018
Yesterday's date and time Mon Jun  4 05:54:43 2018

POSIX İşlevi strftime ()

POSIX işlevini kullanabilirsiniz strftime()Aşağıdaki tablonun yardımıyla tarih ve saati biçimlendirmek için. Yıldız işareti (*) ile işaretlenen tanımlayıcıların yerel ayara bağlı olduğunu lütfen unutmayın.

Tanımlayıcı İle ikame edilmiş Misal
%a Kısaltılmış hafta içi adı * Thu
%A Tam hafta içi adı * Thursday
%b Kısaltılmış ay adı * Aug
%B Tam ay adı * August
%c Tarih ve saat gösterimi * Thu Aug 23 14:55:02 2001
%C Yıl 100'e bölünür ve tam sayıya ( 00-99) kısaltılır 20
%d Ayın günü, sıfır ile doldurulmuş ( 01-31) 23
%D Kısa MM/DD/YYtarih, eşdeğer%m/%d/%y 08/23/01
%e Ayın günü, boşluk doldurulmuş ( 1-31) 23
%F Kısa YYYY-MM-DDtarih, eşdeğer%Y-%m-%d 2001-08-23
%g Hafta bazlı yıl, son iki hane ( 00-99) 01
%G Hafta bazlı yıl 2001
%h Kısaltılmış ay adı * (ile aynı %b) Aug
%H 24 saatlik formatta saat ( 00-23) 14
%I 12 saatlik formatta saat ( 01-12) 02
%j Yılın günü ( 001-366) 235
%m Ondalık sayı olarak ay ( 01-12) 08
%M Dakika ( 00-59) 55
%n Yeni satır karakteri ( '\n')
%p AM veya PM tanımı PM
%r 12 saatlik zaman * 02:55:02 pm
%R 24 saatlik HH:MMzaman, eşdeğer%H:%M 14:55
%S İkinci ( 00-61) 02
%t Yatay sekme karakteri ( '\t')
%T ISO 8601 saat biçimi ( HH:MM:SS), eşdeğer%H:%M:%S 14:55
%u 1( 1-7) Pazartesi ile sayı olarak ISO 8601 hafta içi 4
%U Birinci haftanın ilk günü ilk Pazar olan hafta numarası ( 00-53) 33
%V ISO 8601 hafta numarası ( 00-53) 34
%w Pazar 0( 0-6) ile ondalık sayı olarak hafta içi gün 4
%W Birinci haftanın ilk günü ilk Pazartesi olan hafta numarası ( 00-53) 34
%x Tarih gösterimi * 08/23/01
%X Zaman gösterimi * 14:55:02
%y Yıl, son iki hane ( 00-99) 01
%Y Yıl 2001
%z

Saat diliminde UTC'den ISO 8601 farkı (1 dakika = 1, 1 saat = 100)

Saat dilimi sonlandırılamıyorsa, karakter yok

+100
%Z

Saat dilimi adı veya kısaltması *

Saat dilimi sonlandırılamıyorsa, karakter yok

CDT
%% Bir %işaret %

Kullanımı anlamak için aşağıdaki örneği kontrol edelim -

#!/usr/local/bin/perl
use POSIX qw(strftime);

$datestring = strftime "%a %b %e %H:%M:%S %Y", localtime; printf("date and time - $datestring\n");

# or for GMT formatted appropriately for your locale:
$datestring = strftime "%a %b %e %H:%M:%S %Y", gmtime; printf("date and time - $datestring\n");

Yukarıdaki kod çalıştırıldığında, aşağıdaki sonucu verir -

date and time - Sat Feb 16 07:10:23 2013
date and time - Sat Feb 16 14:10:23 2013

Perl alt yordamı veya işlevi, birlikte bir görevi gerçekleştiren bir deyimler grubudur. Kodunuzu ayrı alt yordamlara bölebilirsiniz. Kodunuzu farklı alt yordamlar arasında nasıl böleceğiniz size bağlıdır, ancak mantıksal olarak bölme genellikle her işlevin belirli bir görevi yerine getirmesidir.

Perl, altyordam, yöntem ve işlev terimlerini birbirinin yerine kullanır.

Bir Alt Rutin Tanımlayın ve Çağırın

Perl programlama dilinde bir alt rutin tanımının genel biçimi aşağıdaki gibidir -

sub subroutine_name {
   body of the subroutine
}

Bu Perl alt yordamını çağırmanın tipik yolu aşağıdaki gibidir -

subroutine_name( list of arguments );

Perl'in 5.0'dan önceki sürümlerinde, alt yordamları çağırmanın sözdizimi aşağıda gösterildiği gibi biraz farklıydı. Bu hala Perl'in en yeni sürümlerinde çalışmaktadır, ancak alt rutin prototiplerini atladığı için önerilmez.

&subroutine_name( list of arguments );

Basit bir işlevi tanımlayan ve sonra onu çağıran aşağıdaki örneğe bir göz atalım. Perl, programınızı çalıştırmadan önce derlediği için, alt rutininizi nerede açıkladığınız önemli değildir.

#!/usr/bin/perl

# Function definition
sub Hello {
   print "Hello, World!\n";
}

# Function call
Hello();

Yukarıdaki program yürütüldüğünde, aşağıdaki sonucu verir -

Hello, World!

Bağımsız Değişkenleri Bir Alt Yordama Aktarma

Herhangi bir başka programlama dilinde yaptığınız gibi bir alt yordama çeşitli argümanlar iletebilirsiniz ve bunlar, @_ özel dizisi kullanılarak işlevin içinden erişilebilir. Böylece fonksiyonun ilk argümanı$_[0], the second is in $_ [1] vb.

Dizileri ve karmaları herhangi bir skaler gibi bağımsız değişkenler olarak geçirebilirsiniz, ancak birden fazla dizi veya karma iletmek normalde ayrı kimliklerini kaybetmelerine neden olur. Bu nedenle, herhangi bir dizi veya karma iletmek için referansları (bir sonraki bölümde açıklanmıştır) kullanacağız.

Bir sayı listesi alıp ortalamalarını yazdıran aşağıdaki örneği deneyelim -

#!/usr/bin/perl

# Function definition
sub Average {
   # get total number of arguments passed.
   $n = scalar(@_); $sum = 0;

   foreach $item (@_) { $sum += $item; } $average = $sum / $n;

   print "Average for the given numbers : $average\n";
}

# Function call
Average(10, 20, 30);

Yukarıdaki program yürütüldüğünde, aşağıdaki sonucu verir -

Average for the given numbers : 20

Listeleri Alt Programlara Aktarma

@_ değişkeni bir dizi olduğundan, listeleri bir alt yordama sağlamak için kullanılabilir. Bununla birlikte, Perl'in listeleri ve dizileri kabul etme ve ayrıştırma biçimi nedeniyle, tek tek öğeleri @_'den çıkarmak zor olabilir. Diğer skaler bağımsız değişkenlerle birlikte bir liste iletmeniz gerekiyorsa, aşağıda gösterildiği gibi listeyi son bağımsız değişken olarak yapın -

#!/usr/bin/perl

# Function definition
sub PrintList {
   my @list = @_;
   print "Given list is @list\n";
}
$a = 10;
@b = (1, 2, 3, 4);

# Function call with list parameter
PrintList($a, @b);

Yukarıdaki program yürütüldüğünde, aşağıdaki sonucu verir -

Given list is 10 1 2 3 4

Hash'leri Altyordamlara Aktarma

Listeyi kabul eden bir alt yordama veya operatöre bir karma sağladığınızda, karma otomatik olarak bir anahtar / değer çiftleri listesine çevrilir. Örneğin -

#!/usr/bin/perl

# Function definition
sub PrintHash {
   my (%hash) = @_;

   foreach my $key ( keys %hash ) {
      my $value = $hash{$key}; print "$key : $value\n";
   }
}
%hash = ('name' => 'Tom', 'age' => 19);

# Function call with hash parameter
PrintHash(%hash);

Yukarıdaki program yürütüldüğünde, aşağıdaki sonucu verir -

name : Tom
age : 19

Bir Alt Yordamdan Dönen Değer

Başka herhangi bir programlama dilinde yaptığınız gibi, alt programdan bir değer döndürebilirsiniz. Bir alt yordamdan bir değer döndürmüyorsanız, bir alt yordamda en son gerçekleştirilen hesaplama da otomatik olarak dönüş değeridir.

Herhangi bir skaler gibi alt yordamdan dizileri ve karmaları döndürebilirsiniz, ancak birden fazla dizi veya karma döndürmek normalde ayrı kimliklerini kaybetmelerine neden olur. Bu nedenle, bir fonksiyondan herhangi bir dizi veya karma döndürmek için referansları (bir sonraki bölümde açıklanmıştır) kullanacağız.

Bir sayılar listesi alıp ortalamalarını döndüren aşağıdaki örneği deneyelim -

#!/usr/bin/perl

# Function definition
sub Average {
   # get total number of arguments passed.
   $n = scalar(@_);
   $sum = 0; foreach $item (@_) {
      $sum += $item;
   }
   $average = $sum / $n; return $average;
}

# Function call
$num = Average(10, 20, 30); print "Average for the given numbers : $num\n";

Yukarıdaki program yürütüldüğünde, aşağıdaki sonucu verir -

Average for the given numbers : 20

Bir Alt Yordamdaki Özel Değişkenler

Varsayılan olarak, Perl'deki tüm değişkenler global değişkenlerdir, yani programın herhangi bir yerinden erişilebilirler. Ama yaratabilirsinprivate değişkenler denir lexical variables ile herhangi bir zamanda my Şebeke.

myoperatör, bir değişkeni, kullanılabileceği ve erişilebileceği belirli bir kod bölgesi ile sınırlar. Bu bölgenin dışında bu değişken kullanılamaz veya erişilemez. Bu bölgeye kapsamı denir. Sözcük kapsamı genellikle, alt yordamın gövdesini tanımlayanlar veya if, while, for, foreach ve eval ifadelerinin kod bloklarını işaretleyenler gibi etrafında bir dizi parantez bulunan bir kod bloğudur .

Aşağıda, bir veya birden çok özel değişkeni kullanarak nasıl tanımlayacağınızı gösteren bir örnek yer almaktadır. my operatör -

sub somefunc {
   my $variable; # $variable is invisible outside somefunc()
   my ($another, @an_array, %a_hash); # declaring many variables at once
}

Global ve özel değişkenleri ayırt etmek için aşağıdaki örneği kontrol edelim -

#!/usr/bin/perl

# Global variable
$string = "Hello, World!";

# Function definition
sub PrintHello {
   # Private variable for PrintHello function
   my $string; $string = "Hello, Perl!";
   print "Inside the function $string\n"; } # Function call PrintHello(); print "Outside the function $string\n";

Yukarıdaki program yürütüldüğünde, aşağıdaki sonucu verir -

Inside the function Hello, Perl!
Outside the function Hello, World!

Local () aracılığıyla Geçici Değerler

localÇoğunlukla bir değişkenin mevcut değerinin çağrılan alt rutinler tarafından görünür olması gerektiğinde kullanılır. Bir yerel, global (anlam paketi) değişkenlere sadece geçici değerler verir. Bu, dinamik kapsam olarak bilinir . Sözcüksel kapsam belirleme, daha çok C'nin otomatik bildirimleri gibi çalışan my ile yapılır.

Local'e birden fazla değişken veya ifade verilmişse, bunlar parantez içine alınmalıdır. Bu operatör, bağımsız değişken listesindeki bu değişkenlerin geçerli değerlerini gizli bir yığına kaydederek ve blok, alt rutin veya eval'dan çıktıktan sonra bunları geri yükleyerek çalışır.

Global ve yerel değişkenleri ayırt etmek için aşağıdaki örneği kontrol edelim -

#!/usr/bin/perl

# Global variable
$string = "Hello, World!"; sub PrintHello { # Private variable for PrintHello function local $string;
   $string = "Hello, Perl!"; PrintMe(); print "Inside the function PrintHello $string\n";
}
sub PrintMe {
   print "Inside the function PrintMe $string\n"; } # Function call PrintHello(); print "Outside the function $string\n";

Yukarıdaki program yürütüldüğünde, aşağıdaki sonucu verir -

Inside the function PrintMe Hello, Perl!
Inside the function PrintHello Hello, Perl!
Outside the function Hello, World!

Durum () aracılığıyla Durum Değişkenleri

Özel değişkenlere benzeyen ancak durumlarını koruyan ve alt rutinlerin birden çok çağrısı üzerine yeniden başlatılmayan başka türden sözcüksel değişkenler vardır. Bu değişkenler kullanılarak tanımlanırstate Operatör ve Perl 5.9.4'ten itibaren mevcuttur.

Kullanımını göstermek için aşağıdaki örneği kontrol edelim state değişkenler -

#!/usr/bin/perl

use feature 'state';

sub PrintCount {
   state $count = 0; # initial value print "Value of counter is $count\n";
   $count++;
}

for (1..5) {
   PrintCount();
}

Yukarıdaki program yürütüldüğünde, aşağıdaki sonucu verir -

Value of counter is 0
Value of counter is 1
Value of counter is 2
Value of counter is 3
Value of counter is 4

Perl 5.10'dan önce bunu şöyle yazmanız gerekirdi -

#!/usr/bin/perl

{
   my $count = 0; # initial value

   sub PrintCount {
      print "Value of counter is $count\n"; $count++;
   }
}

for (1..5) {
   PrintCount();
}

Altyordam Çağrı Bağlamı

Bir alt yordamın veya ifadenin bağlamı, beklenen dönüş değeri türü olarak tanımlanır. Bu, kullanıcının almayı beklediğine bağlı olarak farklı değerler döndüren tek bir işlevi kullanmanıza olanak tanır. Örneğin, aşağıdaki localtime (), skalar bağlamda çağrıldığında bir dize döndürür, ancak liste bağlamında çağrıldığında bir liste döndürür.

my $datestring = localtime( time );

Bu örnekte, $ timestr değeri artık geçerli tarih ve saatten oluşan bir dizedir, örneğin, Per 30 Kasım 15:21:33 2000. Tersine -

($sec,$min,$hour,$mday,$mon, $year,$wday,$yday,$isdst) = localtime(time);

Artık tek tek değişkenler, localtime () alt yordamı tarafından döndürülen karşılık gelen değerleri içerir.

Perl referansı, skaler, diziler veya karmalar olabilecek başka bir değerin konumunu tutan skaler bir veri türüdür. Skaler yapısı nedeniyle, herhangi bir yerde bir referans kullanılabilir, bir skaler kullanılabilir.

Karmalara referanslar vb. İçerebilen diğer listelere referanslar içeren listeler oluşturabilirsiniz. İç içe geçmiş veri yapıları Perl'de bu şekilde oluşturulur.

Referans Oluşturun

Herhangi bir değişken, alt yordam veya değer için, aşağıdaki gibi bir ters eğik çizgi koyarak bir referans oluşturmak kolaydır -

$scalarref = \$foo; $arrayref  = \@ARGV;
$hashref = \%ENV; $coderef   = \&handler;
$globref   = \*foo;

Ters eğik çizgi operatörünü kullanarak bir G / Ç tutamacında (dosya tanıtıcısı veya dirhandle) bir referans oluşturamazsınız, ancak aşağıdaki gibi köşeli parantezler kullanılarak anonim bir diziye bir başvuru oluşturulabilir -

$arrayref = [1, 2, ['a', 'b', 'c']];

Benzer şekilde, süslü parantezleri kullanarak anonim bir hash için aşağıdaki gibi bir referans oluşturabilirsiniz -

$hashref = {
   'Adam'  => 'Eve',
   'Clyde' => 'Bonnie',
};

Anonim bir alt programa bir referans, aşağıdaki gibi bir alt ad olmadan alt kullanılarak oluşturulabilir -

$coderef = sub { print "Boink!\n" };

Başvurudan çıkarma

Başvurudan çıkarma, değeri bir referans noktasından konuma döndürür. Bir referansı kaldırmak için referans değişkeninin öneki olarak referans değişkeninin öneki olarak, referansın bir skalere, diziye veya hash'e işaret etmesine bağlı olarak $, @ veya% kullanın. Kavramı açıklamak için örnek aşağıdadır -

#!/usr/bin/perl

$var = 10;

# Now $r has reference to $var scalar.
$r = \$var;

# Print value available at the location stored in $r. print "Value of $var is : ", $$r, "\n"; @var = (1, 2, 3); # Now $r has reference to @var array.
$r = \@var; # Print values available at the location stored in $r.
print "Value of @var is : ",  @$r, "\n"; %var = ('key1' => 10, 'key2' => 20); # Now $r has reference to %var hash.
$r = \%var; # Print values available at the location stored in $r.
print "Value of %var is : ", %$r, "\n";

Yukarıdaki program yürütüldüğünde, aşağıdaki sonucu verir -

Value of 10 is : 10
Value of 1 2 3 is : 123
Value of %var is : key220key110

Bir değişken türünden emin değilseniz, türünü kullanarak türünü bilmek kolaydır. ref, bağımsız değişkeni bir başvuruysa aşağıdaki dizelerden birini döndürür. Aksi takdirde, yanlış döndürür -

SCALAR
ARRAY
HASH
CODE
GLOB
REF

Aşağıdaki örneği deneyelim -

#!/usr/bin/perl

$var = 10;
$r = \$var;
print "Reference type in r : ", ref($r), "\n"; @var = (1, 2, 3); $r = \@var;
print "Reference type in r : ", ref($r), "\n"; %var = ('key1' => 10, 'key2' => 20); $r = \%var;
print "Reference type in r : ", ref($r), "\n";

Yukarıdaki program yürütüldüğünde, aşağıdaki sonucu verir -

Reference type in r : SCALAR
Reference type in r : ARRAY
Reference type in r : HASH

Sirküler Referanslar

Döngüsel bir referans, iki referans birbirine bir referans içerdiğinde ortaya çıkar. Referans oluştururken dikkatli olmalısınız, aksi takdirde döngüsel bir referans bellek sızıntılarına neden olabilir. Aşağıda bir örnek verilmiştir -

#!/usr/bin/perl

 my $foo = 100;
 $foo = \$foo;
 
 print "Value of foo is : ", $$foo, "\n";

Yukarıdaki program yürütüldüğünde, aşağıdaki sonucu verir -

Value of foo is : REF(0x9aae38)

İşlevlere Referanslar

Bu, bir sinyal işleyici yaratmanız gerektiğinde meydana gelebilir, böylece bir fonksiyon adının önüne \ & koyarak bir fonksiyona referans üretebilir ve referans değişkenini ve işaretini kullanarak referans değişkenine önek eklemeniz gerekir. Aşağıda bir örnek verilmiştir -

#!/usr/bin/perl

# Function definition
sub PrintHash {
   my (%hash) = @_;
   
   foreach $item (%hash) {
      print "Item : $item\n"; } } %hash = ('name' => 'Tom', 'age' => 19); # Create a reference to above function. $cref = \&PrintHash;

# Function call using reference.
&$cref(%hash);

Yukarıdaki program yürütüldüğünde, aşağıdaki sonucu verir -

Item : name
Item : Tom
Item : age
Item : 19

Perl, raporların çıktısını almak için 'format' adı verilen bir yazma şablonu kullanır. Perl'in format özelliğini kullanmak için, önce bir format tanımlamanız gerekir ve daha sonra bu formatı formatlanmış verileri yazmak için kullanabilirsiniz.

Bir Format Tanımlayın

Aşağıda bir Perl formatı tanımlamak için sözdizimi verilmiştir -

format FormatName =
fieldline
value_one, value_two, value_three
fieldline
value_one, value_two
.

Buraya FormatNameformatın adını temsil eder. fieldlinebelirli bir yoldur, veriler biçimlendirilmelidir. Değer çizgileri, alan satırına girilecek değerleri temsil eder. Biçimi tek bir nokta ile bitiriyorsunuz.

Sonraki fieldlineherhangi bir metin veya alan tutucusu içerebilir. Alan sahipleri, daha sonraki bir tarihte buraya yerleştirilecek veriler için yer tutar. Alan sahibi şu biçime sahiptir -

@<<<<

Bu alan sahibi, 5 alan boşluğuyla sola yaslanmıştır. Alandaki boşlukların sayısını bilmek için @ işaretini ve <işaretlerini saymanız gerekir. Diğer alan sahipleri şunları içerir -

@>>>> right-justified
@|||| centered
@####.## numeric field holder
@* multiline field holder

Örnek bir format şöyle olabilir -

format EMPLOYEE =
===================================
@<<<<<<<<<<<<<<<<<<<<<< @<< 
$name $age @#####.## $salary
===================================
.

Bu örnekte $ isim, 22 karakterlik boşluklar içinde sola dayalı olarak yazılacak ve bu yaştan sonra iki boşlukta yazılacaktır.

Biçimi Kullanma

Bu biçim bildirimini çağırmak için, write anahtar kelime -

write EMPLOYEE;

Sorun, format adının genellikle açık bir dosya tutamacının adı olması ve write deyiminin çıktıyı bu dosya tanıtıcısına göndermesidir. STDOUT'a gönderilen verileri istediğimizden, EMPLOYEE'yi STDOUT dosya tanıtıcısı ile ilişkilendirmeliyiz. Ancak ilk olarak, select () işlevini kullanarak STDOUT'un seçili dosya tanıtıcımız olduğundan emin olmalıyız.

select(STDOUT);

Daha sonra EMPLOYEE ile STDOUT arasında yeni biçim adını STDOUT ile, $ ~ veya $ FORMAT_NAME özel değişkenini aşağıdaki gibi kullanarak belirleyerek ilişkilendiririz -

$~ = "EMPLOYEE";

Şimdi bir write () yaptığımızda, veriler STDOUT'a gönderilecektir. Unutmayın: Raporunuzu STDOUT yerine başka bir dosya tanıtıcısına yazacaksanız, bu dosya tutamacını seçmek için select () işlevini kullanabilirsiniz ve mantığın geri kalanı aynı kalacaktır.

Aşağıdaki örneği ele alalım. Burada sadece kullanımı göstermek için kodlanmış değerlerimiz var. Gerçek kullanımda, gerçek raporlar oluşturmak için bir dosyadan veya veritabanından değerler okuyacaksınız ve nihai raporu bir dosyaya yeniden yazmanız gerekebilir.

#!/usr/bin/perl

format EMPLOYEE =
===================================
@<<<<<<<<<<<<<<<<<<<<<< @<< 
$name $age
@#####.##
$salary =================================== . select(STDOUT); $~ = EMPLOYEE;

@n = ("Ali", "Raza", "Jaffer");
@a  = (20,30, 40);
@s = (2000.00, 2500.00, 4000.000);

$i = 0; foreach (@n) { $name = $_; $age = $a[$i];
   $salary = $s[$i++];
   write;
}

Yürütüldüğünde, bu aşağıdaki sonucu verecektir -

===================================
Ali                     20
  2000.00
===================================
===================================
Raza                    30
  2500.00
===================================
===================================
Jaffer                  40
  4000.00
===================================

Bir Rapor Başlığı Tanımlayın

Herşey yolunda görünüyor. Ancak raporunuza bir başlık eklemek ilginizi çekebilir. Bu başlık, her sayfanın üstüne yazdırılacaktır. Bunu yapmak çok basit. Bir şablon tanımlamanın yanı sıra, bir başlık tanımlamanız ve bunu $ ^ veya $ FORMAT_TOP_NAME değişkenine atamanız gerekir -

#!/usr/bin/perl

format EMPLOYEE =
===================================
@<<<<<<<<<<<<<<<<<<<<<< @<< 
$name $age @#####.## $salary
===================================
.

format EMPLOYEE_TOP =
===================================
Name                    Age
===================================
.

select(STDOUT);
$~ = EMPLOYEE; $^ = EMPLOYEE_TOP;

@n = ("Ali", "Raza", "Jaffer");
@a  = (20,30, 40);
@s = (2000.00, 2500.00, 4000.000);

$i = 0; foreach (@n) { $name = $_; $age = $a[$i];
   $salary = $s[$i++];
   write;
}

Şimdi raporunuz şöyle görünecek -

===================================
Name                    Age
===================================
===================================
Ali                     20
  2000.00
===================================
===================================
Raza                    30
  2500.00
===================================
===================================
Jaffer                  40
  4000.00
===================================

Sayfalandırma Tanımlayın

Ya raporunuz birden fazla sayfa alıyorsa? Bunun için bir çözümünüz var, sadece kullanın$% veya $ FORMAT_PAGE_NUMBER $, başlık ile birlikte aşağıdaki gibi değerlenir -

format EMPLOYEE_TOP =
===================================
Name                    Age Page @<
                                 $%
===================================                               
.

Şimdi çıktınız aşağıdaki gibi görünecek -

===================================
Name                    Age Page 1
===================================
===================================
Ali                     20
  2000.00
===================================
===================================
Raza                    30
  2500.00
===================================
===================================
Jaffer                  40
  4000.00
===================================

Bir Sayfadaki Satır Sayısı

Özel değişken kullanarak sayfa başına satır sayısını ayarlayabilirsiniz $= (veya $ FORMAT_LINES_PER_PAGE), Varsayılan olarak $ = 60 olacaktır.

Bir Rapor Altbilgisi Tanımlayın

$ ^ Veya $FORMAT_TOP_NAME contains the name of the current header format, there is no corresponding mechanism to automatically do the same thing for a footer. If you have a fixed-size footer, you can get footers by checking variable $- veya her yazmadan önce $ FORMAT_LINES_LEFT () ve gerekirse aşağıdaki gibi tanımlanan başka bir biçimi kullanarak altbilgiyi kendiniz yazdırın -

format EMPLOYEE_BOTTOM =
End of Page @<
            $%
.

Biçimlendirmeyle ilgili eksiksiz bir değişken seti için lütfen Perl Özel Değişkenleri bölümüne bakın.

Dosyaları işlemenin temelleri basittir: bir filehandle harici bir varlık ile (genellikle bir dosya) ve ardından dosya tanıtıcısı ile ilişkili veri akışında depolanan verileri okumak ve güncellemek için Perl içinde çeşitli işleçler ve işlevler kullanın.

Dosya tanıtıcısı, fiziksel bir dosyayı bir adla ilişkilendiren adlandırılmış bir dahili Perl yapısıdır. Tüm dosya tanıtıcıları okuma / yazma erişimine sahiptir, böylece bir dosya tanıtıcısı ile ilişkili herhangi bir dosya veya cihazdan okuyabilir ve bunları güncelleyebilirsiniz. Bununla birlikte, bir dosya tanıtıcısı ilişkilendirdiğinizde, dosya tanıtıcısının açılacağı modu belirtebilirsiniz.

Üç temel dosya tanıtıcısı şunlardır: STDIN, STDOUT, ve STDERR, sırasıyla standart giriş, standart çıkış ve standart hata cihazlarını temsil eder.

Dosyaları Açma ve Kapatma

Perl'de herhangi bir yeni veya mevcut dosyayı açmak için kullanılabilen, birden çok formda aşağıdaki iki işlev vardır.

open FILEHANDLE, EXPR
open FILEHANDLE

sysopen FILEHANDLE, FILENAME, MODE, PERMS
sysopen FILEHANDLE, FILENAME, MODE

Burada FILEHANDLE, tarafından döndürülen dosya tanıtıcısıdır open işlev ve EXPR, dosya adına ve dosyayı açma moduna sahip ifadedir.

Açık Fonksiyon

Açılacak sözdizimi aşağıdadır file.txtsalt okunur modda. Burada <işaretinden küçük olması dosyanın salt okunur modda açılması gerektiğini belirtir.

open(DATA, "<file.txt");

Burada DATA, dosyayı okumak için kullanılacak olan dosya tanıtıcısıdır. İşte bir dosyayı açacak ve içeriğini ekranın üzerine yazdıracak örnek.

#!/usr/bin/perl

open(DATA, "<file.txt") or die "Couldn't open file file.txt, $!"; while(<DATA>) { print "$_";
}

Dosya.txt dosyasını yazma modunda açmak için sözdizimi aşağıdadır. Burada> işaretinden küçük olması dosyanın yazma modunda açılması gerektiğini gösterir.

open(DATA, ">file.txt") or die "Couldn't open file file.txt, $!";

Bu örnek aslında dosyayı yazmak için açmadan önce keser (boşaltır), ki bu istenen etki olmayabilir. Bir dosyayı okumak ve yazmak için açmak isterseniz,> veya <karakterlerinin önüne bir artı işareti koyabilirsiniz.

Örneğin, bir dosyayı kesmeden güncellemek üzere açmak için -

open(DATA, "+<file.txt"); or die "Couldn't open file file.txt, $!";

Önce dosyayı kesmek için -

open DATA, "+>file.txt" or die "Couldn't open file file.txt, $!";

Ekleme modunda bir dosya açabilirsiniz. Bu modda, yazma noktası dosyanın sonuna ayarlanacaktır.

open(DATA,">>file.txt") || die "Couldn't open file file.txt, $!";

Çift >> dosyayı eklemek için açar ve dosya işaretçisini sona yerleştirir, böylece hemen bilgi eklemeye başlayabilirsiniz. Bununla birlikte, önüne artı işareti koymadıkça okuyamazsınız -

open(DATA,"+>>file.txt") || die "Couldn't open file file.txt, $!";

Aşağıda, farklı modların olası değerlerini veren tablo bulunmaktadır.

Sr.No. Varlıklar ve Tanım
1

< or r

Salt Okunur Erişim

2

> or w

Oluşturur, Yazır ve Keser

3

>> or a

Yazıyor, Ekliyor ve Oluşturuyor

4

+< or r+

Okur ve Yazarlar

5

+> or w+

Okur, Yazır, Oluşturur ve Keser

6

+>> or a+

Okur, Yazır, Ekler ve Oluşturur

Sysopen İşlevi

sysopen işlevi, sistemi kullanması dışında ana açık işlevine benzer open() işlevi, kendisine sağlanan parametreleri sistem işlevi için parametreler olarak kullanarak -

Örneğin, güncelleme için bir dosya açmak için +<filename açık biçimden -

sysopen(DATA, "file.txt", O_RDWR);

Veya güncellemeden önce dosyayı kesmek için -

sysopen(DATA, "file.txt", O_RDWR|O_TRUNC );

Yeni bir dosya oluşturmak için O_CREAT'i ve dosyayı salt yazma modunda açmak için O_WRONLY'yi ve dosyayı salt okunur modda açmak için O_RDONLY'yi kullanabilirsiniz.

PERMSargüman, oluşturulması gerekiyorsa, belirtilen dosya için dosya izinlerini belirtir. Varsayılan olarak alır0x666.

Aşağıda MODE'nin olası değerlerini veren tablo yer almaktadır.

Sr.No. Varlıklar ve Tanım
1

O_RDWR

Oku ve yaz

2

O_RDONLY

Sadece oku

3

O_WRONLY

Yalnızca Yazma

4

O_CREAT

Dosyayı oluşturun

5

O_APPEND

Dosyayı ekleyin

6

O_TRUNC

Dosyayı kes

7

O_EXCL

Dosya zaten mevcutsa durur

8

O_NONBLOCK

Engellemeyen kullanılabilirlik

Kapat Fonksiyonu

Bir dosya tanıtıcısını kapatmak ve dolayısıyla dosya tanıtıcısının ilgili dosyayla ilişkisini kesmek için, closeişlevi. Bu, dosya tanıtıcısının arabelleklerini temizler ve sistemin dosya tanımlayıcısını kapatır.

close FILEHANDLE
close

FILEHANDLE belirtilmezse, o anda seçili olan dosya tanıtıcısını kapatır. Yalnızca arabellekleri başarıyla temizleyip dosyayı kapatabilirse true döndürür.

close(DATA) || die "Couldn't close file properly";

Dosyaları Okuma ve Yazma

Açık bir dosya tanıtıcınız olduğunda, bilgileri okuyup yazabilmeniz gerekir. Dosyaya veri okuma ve yazmanın birkaç farklı yolu vardır.

<FILEHANDL> Operatörü

Açık bir dosya tanıtıcısından bilgileri okumanın ana yöntemi <FILEHANDLE> operatördür. Skaler bir bağlamda, dosya tanıtıcısından tek bir satır döndürür. Örneğin -

#!/usr/bin/perl

print "What is your name?\n";
$name = <STDIN>;
print "Hello $name\n";

<FILEHANDLE> operatörünü bir liste bağlamında kullandığınızda, belirtilen dosya tanıtıcısından satırların bir listesini döndürür. Örneğin, bir dosyadaki tüm satırları bir diziye aktarmak için -

#!/usr/bin/perl

open(DATA,"<import.txt") or die "Can't open data";
@lines = <DATA>;
close(DATA);

getc İşlevi

Getc işlevi belirtilen FILEHANDLE'dan tek bir karakter veya hiçbiri belirtilmemişse STDIN döndürür -

getc FILEHANDLE
getc

Bir hata varsa veya dosya tanıtıcısı dosyanın sonundaysa bunun yerine undef döndürülür.

Fonksiyonu oku

Okuma işlevi, arabelleğe alınmış dosya tanıtıcısından bir bilgi bloğunu okur: Bu işlev, dosyadan ikili verileri okumak için kullanılır.

read FILEHANDLE, SCALAR, LENGTH, OFFSET
read FILEHANDLE, SCALAR, LENGTH

Okunan verinin uzunluğu LENGTH ile tanımlanır ve veri OFFSET belirtilmezse SCALAR'ın başlangıcına yerleştirilir. Aksi takdirde veriler SCALAR'da OFFSET baytlarından sonra yerleştirilir. İşlev başarılı olduğunda okunan bayt sayısını, dosyanın sonunda sıfır veya bir hata varsa undef döndürür.

yazdırma İşlevi

Dosya tanıtıcılarından bilgi okumak için kullanılan tüm farklı yöntemler için, bilgileri geri yazmak için ana işlev yazdırma işlevidir.

print FILEHANDLE LIST
print LIST
print

Yazdırma işlevi, LIST'in değerlendirilen değerini FILEHANDLE'a veya geçerli çıktı dosya tanıtıcısına (varsayılan olarak STDOUT) yazdırır. Örneğin -

print "Hello World!\n";

Dosyalar kopyalanıyor

İşte dosya1.txt dosyasını açan ve satır satır okuyan ve başka bir dosya2.txt dosyası oluşturan örnek.

#!/usr/bin/perl

# Open file to read
open(DATA1, "<file1.txt");

# Open new file to write
open(DATA2, ">file2.txt");

# Copy data from one file to another.
while(<DATA1>) {
   print DATA2 $_;
}
close( DATA1 );
close( DATA2 );

Bir dosyayı yeniden adlandırma

İşte bir file1.txt dosyasını file2.txt olarak nasıl yeniden adlandırabileceğimizi gösteren bir örnek. Varsayalım ki dosya / usr / test dizininde bulunur.

#!/usr/bin/perl

rename ("/usr/test/file1.txt", "/usr/test/file2.txt" );

Bu işlev renames iki argüman alır ve sadece mevcut dosyayı yeniden adlandırır.

Mevcut bir Dosyayı Silme

İşte file1.txt dosyasını kullanarak nasıl silineceğini gösteren bir örnek. unlink işlevi.

#!/usr/bin/perl

unlink ("/usr/test/file1.txt");

Bir Dosyanın İçinde Konumlandırma

İçin kullanabilirsiniz tell bir dosyanın mevcut konumunu bilme işlevi ve seek dosya içinde belirli bir konumu işaret etme işlevi.

tell Function

İlk gereksinim, tell işlevini kullanarak yaptığınız bir dosya içindeki konumunuzu bulmaktır -

tell FILEHANDLE
tell

Bu, belirtilmişse FILEHANDLE içindeki dosya işaretçisinin konumunu bayt cinsinden veya hiçbiri belirtilmemişse geçerli varsayılan seçili dosya tanıtıcısını döndürür.

arama İşlevi

Arama işlevi, dosya işaretçisini bir dosya içinde belirtilen bayta göre konumlandırır -

seek FILEHANDLE, POSITION, WHENCE

İşlev, fseek sistem işlevini kullanır ve üç farklı noktaya göre aynı konumlandırma yeteneğine sahip olursunuz: başlangıç, bitiş ve geçerli konum. Bunu, WHENCE için bir değer belirleyerek yaparsınız.

Sıfır, konumlandırmayı dosyanın başlangıcına göre ayarlar. Örneğin, satır, dosya işaretçisini dosyadaki 256. bayta ayarlar.

seek DATA, 256, 0;

Dosya bilgisi

Toplu olarak -X testleri olarak bilinen bir dizi test operatörü kullanarak Perl içinde belirli özellikleri çok hızlı bir şekilde test edebilirsiniz. Örneğin, bir dosyadaki çeşitli izinlerin hızlı bir testini gerçekleştirmek için şuna benzer bir komut dosyası kullanabilirsiniz -

#/usr/bin/perl

my $file = "/usr/test/file1.txt"; my (@description, $size);
if (-e $file) { push @description, 'binary' if (-B _); push @description, 'a socket' if (-S _); push @description, 'a text file' if (-T _); push @description, 'a block special file' if (-b _); push @description, 'a character special file' if (-c _); push @description, 'a directory' if (-d _); push @description, 'executable' if (-x _); push @description, (($size = -s _)) ? "$size bytes" : 'empty'; print "$file is ", join(', ',@description),"\n";
}

Bir dosya veya dizini kontrol edebileceğiniz özelliklerin listesi aşağıdadır -

Sr.No. Operatör ve Tanım
1

-A

Komut dosyası başlangıç ​​zamanı eksi dosya son erişim süresi, gün cinsinden.

2

-B

İkili dosya mı?

3

-C

Komut dosyası başlangıç ​​zamanı eksi dosya son inode değişiklik zamanı, gün cinsinden.

3

-M

Komut dosyası başlangıç ​​zamanı eksi dosya değiştirme süresi, gün cinsinden.

4

-O

Dosyanın sahibi gerçek kullanıcı kimliğine mi ait?

5

-R

Dosya gerçek kullanıcı kimliği veya gerçek grup tarafından okunabilir mi?

6

-S

Dosya bir soket mi?

7

-T

Bu bir metin dosyası mı?

8

-W

Dosya gerçek kullanıcı kimliği veya gerçek grup tarafından yazılabilir mi?

9

-X

Dosya gerçek kullanıcı kimliği veya gerçek grup tarafından yürütülebilir mi?

10

-b

Blok özel bir dosya mı?

11

-c

Özel bir karakter dosyası mı?

12

-d

Dosya bir dizin mi?

13

-e

Dosya mevcut mu?

14

-f

Düz bir dosya mı?

15

-g

Dosyada setgid bit seti var mı?

16

-k

Dosyada yapışkan bit ayarlanmış mı?

17

-l

Dosya sembolik bir bağlantı mı?

18

-o

Dosyanın sahibi etkili kullanıcı kimliğine mi ait?

19

-p

Dosya adlandırılmış bir kanal mı?

20

-r

Dosya, etkin kullanıcı veya grup kimliği tarafından okunabilir mi?

21

-s

Sıfır boyut = boş dosya olarak dosyanın boyutunu döndürür.

22

-t

Dosya tanıtıcısı bir TTY (terminal) tarafından mı açıldı?

23

-u

Dosyada setuid bit seti var mı?

24

-w

Dosya etkin kullanıcı veya grup kimliği ile yazılabilir mi?

25

-x

Dosya, etkin kullanıcı veya grup kimliği tarafından yürütülebilir mi?

26

-z

Dosya boyutu sıfır mı?

Aşağıdakiler, dizinlerle oynamak için kullanılan standart işlevlerdir.

opendir DIRHANDLE, EXPR  # To open a directory
readdir DIRHANDLE        # To read a directory
rewinddir DIRHANDLE      # Positioning pointer to the begining
telldir DIRHANDLE        # Returns current position of the dir
seekdir DIRHANDLE, POS   # Pointing pointer to POS inside dir
closedir DIRHANDLE       # Closing a directory.

Tüm Dosyaları Göster

Belirli bir dizinde bulunan tüm dosyaları listelemenin çeşitli yolları vardır. Öncelikle, şunu kullanarak tüm dosyaları almanın ve listelemenin basit yolunu kullanalım.glob operatör -

#!/usr/bin/perl

# Display all the files in /tmp directory.
$dir = "/tmp/*"; my @files = glob( $dir );

foreach (@files ) {
   print $_ . "\n"; } # Display all the C source files in /tmp directory. $dir = "/tmp/*.c";
@files = glob( $dir ); foreach (@files ) { print $_ . "\n";
}

# Display all the hidden files.
$dir = "/tmp/.*"; @files = glob( $dir );
foreach (@files ) {
   print $_ . "\n"; } # Display all the files from /tmp and /home directories. $dir = "/tmp/* /home/*";
@files = glob( $dir ); foreach (@files ) { print $_ . "\n";
}

İşte bir dizini açan ve bu dizinde bulunan tüm dosyaları listeleyen başka bir örnek.

#!/usr/bin/perl

opendir (DIR, '.') or die "Couldn't open directory, $!"; while ($file = readdir DIR) {
   print "$file\n";
}
closedir DIR;

Kullanabileceğiniz C kaynak dosyalarının listesini yazdırmak için bir örnek daha -

#!/usr/bin/perl

opendir(DIR, '.') or die "Couldn't open directory, $!";
foreach (sort grep(/^.*\.c$/,readdir(DIR))) { print "$_\n";
}
closedir DIR;

Yeni Dizin oluştur

Kullanabilirsiniz mkdiryeni bir dizin oluşturma işlevi. Bir dizin oluşturmak için gerekli izne sahip olmanız gerekecektir.

#!/usr/bin/perl

$dir = "/tmp/perl"; # This creates perl directory in /tmp directory. mkdir( $dir ) or die "Couldn't create $dir directory, $!";
print "Directory created successfully\n";

Bir dizini kaldır

Kullanabilirsiniz rmdirbir dizini kaldırma işlevi. Bir dizini kaldırmak için gerekli izne sahip olmanız gerekir. Ayrıca, kaldırmaya çalışmadan önce bu dizin boş olmalıdır.

#!/usr/bin/perl

$dir = "/tmp/perl"; # This removes perl directory from /tmp directory. rmdir( $dir ) or die "Couldn't remove $dir directory, $!";
print "Directory removed successfully\n";

Bir Dizini Değiştirin

Kullanabilirsiniz chdirbir dizini değiştirmek ve yeni bir konuma gitmek için işlev. Bir dizini değiştirmek ve yeni dizine girmek için gerekli izne sahip olmanız gerekecektir.

#!/usr/bin/perl

$dir = "/home"; # This changes perl directory and moves you inside /home directory. chdir( $dir ) or die "Couldn't go inside $dir directory, $!";
print "Your new location is $dir\n";

Uygulama ve hatalar her zaman birlikte gider. Var olmayan bir dosyayı açıyorsanız. o zaman bu durumu düzgün bir şekilde ele almadıysanız, programınızın kalitesinin kötü olduğu kabul edilir.

Bir hata oluşursa program durur. Bu nedenle, bir programın yürütülmesi sırasında ortaya çıkabilecek çeşitli türdeki hataları işlemek ve programı tamamen durdurmak yerine uygun eylemi gerçekleştirmek için uygun bir hata işleme kullanılır.

Bir hatayı birkaç farklı yolla tanımlayabilir ve yakalayabilirsiniz. Perl'de hataları yakalamak ve sonra bunları düzgün bir şekilde ele almak çok kolaydır. İşte kullanılabilecek birkaç yöntem.

İf ifadesi

if statementbir ifadeden dönüş değerini kontrol etmeniz gerektiğinde açık bir seçimdir; örneğin -

if(open(DATA, $file)) {
   ...
} else {
   die "Error: Couldn't open the file - $!";
}

Burada değişken $! gerçek hata mesajını döndürür. Alternatif olarak, mantıklı olduğu durumlarda ifadeyi tek satıra indirebiliriz; örneğin -

open(DATA, $file) || die "Error: Couldn't open the file $!";

Ifade Fonksiyonu

unlessişlev if: deyimlerinin mantıksal olarak tersidir: deyimler başarı durumunu tamamen atlayabilir ve yalnızca ifade yanlış döndürürse çalıştırılabilir. Örneğin -

unless(chdir("/etc")) {
   die "Error: Can't change directory - $!";
}

unlessifadesi en iyi, bir hata ortaya çıkarmak istediğinizde veya yalnızca ifade başarısız olursa alternatif olarak kullanılır. İfade, tek satırlık bir ifadede kullanıldığında da anlamlıdır -

die "Error: Can't change directory!: $!" unless(chdir("/etc"));

Burada sadece chdir işlemi başarısız olursa ölürüz ve güzel okur.

Üçlü Operatör

Çok kısa testler için koşullu operatörü kullanabilirsiniz. ?:

print(exists($hash{value}) ? 'There' : 'Missing',"\n");

Neyi başarmaya çalıştığımız burada çok net değil, ancak etki, bir if veya unlessBeyan. Koşullu operatör, bir ifade veya ifade içindeki iki değerden birini hızlı bir şekilde döndürmek istediğinizde en iyi şekilde kullanılır.

Uyarı işlevi

Uyarı işlevi yalnızca bir uyarı verir, STDERR'a bir mesaj yazdırılır, ancak başka bir işlem yapılmaz. Bu nedenle, yalnızca kullanıcı için bir uyarı yazdırmak ve işlemin geri kalanına devam etmek istiyorsanız daha kullanışlıdır -

chdir('/etc') or warn "Can't change directory";

Kalıp işlevi

Kalıp işlevi, çıkış çağırması dışında, tıpkı warn gibi çalışır. Normal bir komut dosyası içinde bu işlev, yürütmeyi hemen sonlandırma etkisine sahiptir. Programda bir hata varsa devam etmenin yararsız olması durumunda bu işlevi kullanmalısınız -

chdir('/etc') or die "Can't change directory";

Modüller içindeki Hatalar

Üstesinden gelebilmemiz gereken iki farklı durum var -

  • Modülün dosya adını ve satır numarasını belirten bir modüldeki bir hatayı bildirme - bu, bir modülde hata ayıklarken veya özellikle komut dosyasıyla ilgili değil, modülle ilgili bir hata oluşturmak istediğinizde yararlıdır.

  • Arayanın bilgilerini aktaran bir modül içindeki bir hatayı bildirerek, hataya neden olan komut dosyası içindeki satırda hata ayıklayabilirsiniz. Bu şekilde ortaya çıkan hatalar son kullanıcı için yararlıdır, çünkü arayan komut dosyasının başlangıç ​​satırıyla ilgili hatayı vurgularlar.

warn ve dieişlevler, bir modül içinden çağrıldığında beklediğinizden biraz farklı çalışır. Örneğin, basit modül -

package T;

require Exporter;
@ISA = qw/Exporter/;
@EXPORT = qw/function/;
use Carp;

sub function {
   warn "Error in module!";
}
1;

Aşağıdaki gibi bir komut dosyasından çağrıldığında -

use T;
function();

Aşağıdaki sonucu üretecektir -

Error in module! at T.pm line 9.

Bu, aşağı yukarı beklediğiniz şeydir, ancak tam olarak istediğiniz şey değildir. Bir modül programcısının bakış açısından, bilgi yararlıdır çünkü modülün kendi içindeki bir hataya işaret etmeye yardımcı olur. Bir son kullanıcı için, sağlanan bilgiler oldukça faydasızdır ve sertleştirilmiş programcı dışındaki herkes için tamamen anlamsızdır.

Bu tür sorunların çözümü, çağıran komut dosyası hakkında bilgi döndüren modüller içindeki hataları raporlamak için basitleştirilmiş bir yöntem sağlayan Carp modülüdür. Sazan modülü dört işlev sağlar: sazan, gümbürtü, vrak ve itiraf. Bu işlevler aşağıda tartışılmıştır.

Sazan İşlevi

Carp işlevi, warn işlevinin temel eşdeğeridir ve gerçekte komut dosyasından çıkmadan ve komut dosyası adını yazdırmadan mesajı STDERR'a yazdırır.

package T;

require Exporter;
@ISA = qw/Exporter/;
@EXPORT = qw/function/;
use Carp;

sub function {
   carp "Error in module!";
}
1;

Aşağıdaki gibi bir komut dosyasından çağrıldığında -

use T;
function();

Aşağıdaki sonucu üretecektir -

Error in module! at test.pl line 4

Cluck İşlevi

Cluck işlevi bir tür aşırı yüklü sazan balığıdır, aynı temel ilkeyi izler, ancak aynı zamanda, orijinal komut dosyası üzerindeki bilgiler de dahil olmak üzere çağrılan işleve yol açan tüm modüllerin bir yığın izini yazdırır.

package T;

require Exporter;
@ISA = qw/Exporter/;
@EXPORT = qw/function/;
use Carp qw(cluck);

sub function {
   cluck "Error in module!";
}
1;

Aşağıdaki gibi bir komut dosyasından çağrıldığında -

use T;
function();

Aşağıdaki sonucu üretecektir -

Error in module! at T.pm line 9
   T::function() called at test.pl line 4

Croak Fonksiyonu

croak işlevi eşdeğerdir die, arayan kişiyi bir seviye yukarı bildirmesi dışında. Die gibi, bu işlev de hatayı STDERR'a bildirdikten sonra komut dosyasından çıkar -

package T;

require Exporter;
@ISA = qw/Exporter/;
@EXPORT = qw/function/;
use Carp;

sub function {
   croak "Error in module!";
}
1;

Aşağıdaki gibi bir komut dosyasından çağrıldığında -

use T;
function();

Aşağıdaki sonucu üretecektir -

Error in module! at test.pl line 4

Sazan'da olduğu gibi, uyarı ve kalıp işlevlerine göre satır ve dosya bilgilerinin dahil edilmesinde aynı temel kurallar geçerlidir.

İtiraf Fonksiyonu

confess işlev gibidir cluck; die çağırır ve ardından kaynak komut dosyasına kadar bir yığın izi yazdırır.

package T;

require Exporter;
@ISA = qw/Exporter/;
@EXPORT = qw/function/;
use Carp;

sub function {
   confess "Error in module!";
}
1;

Aşağıdaki gibi bir komut dosyasından çağrıldığında -

use T;
function();

Aşağıdaki sonucu üretecektir -

Error in module! at T.pm line 9
   T::function() called at test.pl line 4

Perl'de önceden tanımlanmış ve özel anlamı olan bazı değişkenler vardır. Normal değişken göstergesinden ($, @ veya%) sonra noktalama karakterlerini kullanan değişkenlerdir, örneğin $ _ (aşağıda açıklanmıştır).

Özel değişkenlerin çoğu uzun bir ad gibi İngilizce'ye sahiptir, örneğin İşletim Sistemi Hatası değişkeni $! $ OS_ERROR olarak yazılabilir. Ama ingilizceyi isimler gibi kullanacaksan, o zaman bir satır koymalısınuse English;program dosyanızın en üstünde. Bu, yorumlayıcının değişkenin tam anlamını almasına rehberlik eder.

En sık kullanılan özel değişken, varsayılan girdi ve kalıp arama dizesini içeren $ _ 'dır. Örneğin, aşağıdaki satırlarda -

#!/usr/bin/perl

foreach ('hickory','dickory','doc') {
   print $_;
   print "\n";
}

Yürütüldüğünde, bu aşağıdaki sonucu verecektir -

hickory
dickory
doc

Yine aynı örneği $ _ değişkenini açıkça kullanmadan kontrol edelim -

#!/usr/bin/perl

foreach ('hickory','dickory','doc') {
   print;
   print "\n";
}

Yürütüldüğünde, bu aynı zamanda aşağıdaki sonucu da verecektir -

hickory
dickory
doc

Döngü ilk kez yürütüldüğünde "hickory" yazdırılır. İkinci kez, "dickory" yazdırılır ve üçüncü kez "doc" yazdırılır. Bunun nedeni, döngünün her yinelemesinde, geçerli dizenin$_, and is used by default by print. Here are the places where Perl will assume $_ belirtmeseniz bile -

  • Ord ve int gibi işlevlerin yanı sıra varsayılan STDIN olan -t dışındaki tüm dosya testleri (-f, -d) dahil çeşitli tekli işlevler.

  • Yazdır ve bağlantıyı kaldır gibi çeşitli liste işlevleri.

  • = ~ Operatörü olmadan kullanıldığında model eşleştirme işlemleri m //, s /// ve tr ///.

  • Başka değişken sağlanmadıysa, foreach döngüsündeki varsayılan yineleyici değişkeni.

  • Grep ve harita işlevlerindeki örtük yineleyici değişkeni.

  • Bir satır-giriş işleminin sonucu bir while testinin tek kriteri olarak tek başına test edildiğinde bir girdi kaydı koymak için varsayılan yer (yani,). Bir süreli test dışında bunun olmayacağını unutmayın.

Özel Değişken Türleri

Özel değişkenlerin kullanımına ve doğasına bağlı olarak, bunları aşağıdaki kategorilere ayırabiliriz -

  • Global Skaler Özel Değişkenler.
  • Global Dizi Özel Değişkenleri.
  • Global Hash Özel Değişkenleri.
  • Global Özel Dosya Tutucular.
  • Global Özel Sabitler.
  • Düzenli İfade Özel Değişkenleri.
  • Filehandle Özel Değişkenleri.

Global Skaler Özel Değişkenler

İşte tüm skaler özel değişkenlerin listesi. İlgili ingilizceyi sembolik isimlerle birlikte isimler gibi listeledik.

$ _ Varsayılan giriş ve kalıp arama alanı.
ARG
$. Okunan son dosya tanıtıcısının geçerli giriş satır numarası. Dosya tanıtıcısı üzerindeki açık bir kapatma, satır numarasını sıfırlar.
$ NR
$ / Giriş kaydı ayırıcısı; varsayılan olarak yeni satır. Boş dizge olarak ayarlanırsa, boş satırları sınırlayıcı olarak değerlendirir.
$ RS
$, Baskı operatörü için çıktı alanı ayırıcısı.
OFS
$ \ Baskı operatörü için çıktı kaydı ayırıcısı.
$ ORS
$ " "$" Gibi, tek farkı çift tırnaklı bir dizgeye (veya benzer yorumlanmış dizgeye) eklenen değerlerin listesi için geçerlidir. Varsayılan bir boşluktur.
$ LIST_SEPARATOR
$; Çok boyutlu dizi öykünmesi için alt simge ayırıcı. Varsayılan "\ 034" dür.
$ SUBSCRIPT_SEPARATOR
^ L Form beslemeyi gerçekleştirmek için bir formatın çıktıları. Varsayılan "\ f" dir.
FORMAT_FORMFEED $
$: Devam alanlarını (^ ile başlayan) bir formatta doldurmak için bir dizeden sonra kesilebilen geçerli karakter kümesi. Varsayılan "\ n" "dir.
FORMAT_LINE_BREAK_CHARACTERS ABD doları
$ ^ A Biçim satırları için yazma toplayıcısının geçerli değeri.
$ AKÜMÜLATÖR
$ # Basılı numaralar için çıktı formatını içerir (kullanımdan kaldırıldı).
$ OFMT
$? Son boru kapatma, geri işaret (``) komutu veya sistem operatörü tarafından döndürülen durum.
$ CHILD_ERROR
$! Sayısal bir bağlamda kullanılırsa, son sistem çağrısı hatasını belirleyen errno değişkeninin geçerli değerini verir. Bir dizge bağlamında kullanılırsa, karşılık gelen sistem hatası dizesini verir.
$OS_ERROR or $ERRNO
$ @ Son eval komutundan Perl sözdizimi hata mesajı.
$ EVAL_ERROR
$$ Bu betiği çalıştıran Perl işleminin pid'i.
$ PROCESS_ID veya $ PID
$ < Bu işlemin gerçek kullanıcı kimliği (uid).
$REAL_USER_ID or $UID
$> Bu işlemin etkili kullanıcı kimliği.
$ EFFECTIVE_USER_ID veya $ EUID
$ ( Bu sürecin gerçek grup kimliği (gid).
$REAL_GROUP_ID or $GID
$) Bu sürecin etkili yolu.
$ EFFECTIVE_GROUP_ID veya $ EGID
0 $ Yürütülen Perl betiğini içeren dosyanın adını içerir.
$ PROGRAM_NAME
$ [ Bir dizideki ilk öğenin ve bir alt dizedeki ilk karakterin dizini. Varsayılan 0'dır.
$] 1000'e bölünen sürüm artı yama düzeyini döndürür.
PERL_VERSION ABD doları
$ ^ D Hata ayıklama bayraklarının geçerli değeri.
$ HATA AYIKLAMA
$ ^ E Bazı platformlarda genişletilmiş hata mesajı.
$ EXTENDED_OS_ERROR
$ ^ F Maksimum sistem dosyası tanımlayıcısı, normalde 2.
$ SYSTEM_FD_MAX
$ ^ H Bazı pragmatik modüller tarafından etkinleştirilen dahili derleyici ipuçlarını içerir.
$ ^ I Yerinde düzenleme uzantısının mevcut değeri. Yerinde düzenlemeyi devre dışı bırakmak için undef kullanın.
$ INPLACE_EDIT
$ ^ M İçeriği $M can be used as an emergency memory pool in case Perl dies with an out-of-memory error. Use of $M özel bir Perl derlemesi gerektirir. Daha fazla bilgi için KURULUM belgesine bakın.
$ ^ O Geçerli Perl ikili dosyasının derlendiği işletim sisteminin adını içerir.
$ OSNAME
$ ^ P Hata ayıklayıcının kendi kendine hata ayıklamaması için temizlediği dahili bayrak.
PERLDB $
$ ^ T Komut dosyasının, dönemden bu yana saniye cinsinden çalışmaya başladığı saat.
BASETIME ABD doları
$ ^ W Doğru veya yanlış, uyarı anahtarının mevcut değeri.
$ UYARI
$ ^ X Perl ikilisinin kendisinin yürütüldüğü ad.
$ EXECUTABLE_NAME
$ ARGV <ARGV> 'den okurken mevcut dosyanın adını içerir.

Global Dizi Özel Değişkenleri

@ARGV Komut dosyası için amaçlanan komut satırı bağımsız değişkenlerini içeren dizi.
@INC Do, require veya use yapıları tarafından değerlendirilecek Perl betiklerinin aranacağı yerlerin listesini içeren dizi.
@F -A komut satırı anahtarı verildiğinde giriş satırlarının bölündüğü dizi.

Global Hash Özel Değişkenleri

% INC Do veya require aracılığıyla eklenen her dosyanın dosya adı için girişleri içeren karma.
% ENV Mevcut ortamınızı içeren karma.
% SIG Hash, çeşitli sinyaller için sinyal işleyicileri ayarlamak için kullanılır.

Global Özel Dosya Tutucular

ARGV @ARGV'deki komut satırı dosya adlarını yineleyen özel dosya tanıtıcısı. Genellikle <> 'de boş dosya tanıtıcısı olarak yazılır.
STDERR Herhangi bir pakette standart hata için özel dosya tanıtıcısı.
STDIN Herhangi bir pakette standart girdi için özel dosya tanıtıcısı.
STDOUT Herhangi bir pakette standart çıktı için özel dosya tanıtıcısı.
VERİ Komut dosyasını içeren dosyada __END__ belirtecinden sonra gelen herhangi bir şeyi ifade eden özel dosya tanıtıcısı. Veya __DATA__ simgesinin içinde bulunduğu aynı paketteki verileri okuduğunuz sürece, gerekli bir dosyada __DATA__ belirtecini takip eden herhangi bir şey için özel dosya tanıtıcısı.
_ (vurgulamak) Son stat, lstat veya dosya testi operatöründen bilgileri önbelleğe almak için kullanılan özel dosya tanıtıcısı.

Global Özel Sabitler

__SON__ Programınızın mantıksal sonunu gösterir. Aşağıdaki metinler yok sayılır, ancak VERİ dosya tanıtıcısı aracılığıyla okunabilir.
__DOSYA__ Programınızda kullanıldığı noktada dosya adını temsil eder. Dizelere enterpolasyon yapılmaz.
__HAT__ Mevcut satır numarasını temsil eder. Dizelere enterpolasyon yapılmaz.
__PAKET__ Derleme zamanında mevcut paket adını veya mevcut paket yoksa tanımsız adını temsil eder. Dizelere enterpolasyon yapılmaz.

Normal İfade Özel Değişkenleri

$ basamak Eşleşen son örüntüdeki karşılık gelen parantez kümesiyle eşleşen metni içerir. Örneğin, $ 1, önceki normal ifadedeki ilk parantez kümesinde bulunanla eşleşir.
$ & Son başarılı desen eşleşmesiyle eşleşen dize.
$ MATCH
$ ' Son başarılı desen eşleşmesiyle eşleşen şeyden önceki dize.
$ PREMATCH
$ ' Son başarılı desen eşleşmesiyle eşleşen şeyi takip eden dize.
$ POSTMATCH
$ + Son arama modeliyle eşleşen son parantez. Bu, alternatif modellerden hangisinin eşleştiğini bilmiyorsanız kullanışlıdır. Örneğin: / Sürüm: (. *) | Revizyon: (. *) / && ($rev = $+);
LAST_PAREN_MATCH $

Filehandle Özel Değişkenleri

$ | Sıfırdan farklı bir değere ayarlanırsa, seçili çıkış kanalındaki her yazma veya yazdırmadan sonra bir fflush (3) zorlar.
$ OUTPUT_AUTOFLUSH
$% O anda seçili çıkış kanalının geçerli sayfa numarası.
FORMAT_PAGE_NUMBER ABD doları
$ = Halihazırda seçili olan çıktı kanalının geçerli sayfa uzunluğu (yazdırılabilir satırlar). Varsayılan 60'tır.
FORMAT_LINES_PER_PAGE $
$ - O anda seçili çıkış kanalının sayfasında kalan satır sayısı.
FORMAT_LINES_LEFT $
$ ~ Mevcut seçili çıktı kanalı için geçerli rapor formatının adı. Varsayılan, dosya tanıtıcısının adıdır.
FORMAT_NAME $
$ ^ O anda seçili çıkış kanalı için geçerli sayfanın üstü biçiminin adı. Varsayılan, _TOP eklenmiş dosya tanıtıcısının adıdır.
FORMAT_TOP_NAME $

Elbette her programcının biçimlendirme konusunda kendi tercihleri ​​olacaktır, ancak programlarınızı okumayı, anlamayı ve sürdürmeyi kolaylaştıracak bazı genel yönergeler vardır.

En önemli şey, programlarınızı her zaman -w bayrağı altında çalıştırmaktır. Gerekirse, uyarı yok pragması veya $ ^ W değişkeni aracılığıyla belirli kod bölümleri için bunu açıkça kapatabilirsiniz. Ayrıca her zaman katı kullanım altında çalışmalı veya neden olmasın nedenini bilmelisiniz. Sigtrap kullanımı ve hatta teşhis pragmalarının kullanılması da faydalı olabilir.

Kod yerleşiminin estetiğiyle ilgili olarak, Larry'nin önem verdiği tek şey, çok satırlı bir BLOCK'un kapanış küme parantezinin, yapıyı başlatan anahtar kelimeyle aynı hizada olması gerektiğidir. Bunun ötesinde, o kadar güçlü olmayan başka tercihleri ​​var -

  • 4 sütunlu girinti.
  • Mümkünse anahtar kelime ile aynı satırda kıvrık açılış, aksi takdirde sıraya dizilir.
  • Çok satırlı bir BLOK'un açılış kıvrımından önceki boşluk.
  • Tek satırlık BLOK, kıvrımlar da dahil olmak üzere tek satıra konabilir.
  • Noktalı virgülden önce boşluk yok.
  • "Kısa" tek satırlık BLOK'ta noktalı virgül ihmal edildi.
  • Çoğu operatörün etrafında boşluk.
  • "Karmaşık" bir alt simge (parantez içinde) etrafındaki boşluk.
  • Farklı şeyler yapan parçalar arasında boş satırlar.
  • Kucaklanmayan başkaları.
  • İşlev adı ve açılış parantezi arasında boşluk yok.
  • Her virgülden sonra boşluk.
  • Bir operatörden sonra kesilen uzun çizgiler (ve ve veya hariç).
  • Geçerli satırdaki son parantez eşleşmesinden sonraki boşluk.
  • Karşılık gelen öğeleri dikey olarak sıralayın.
  • Netlik zarar görmediği sürece gereksiz noktalama işaretlerini atlayın.

İşte üzerinde düşünülmesi gereken diğer bazı daha sağlam stil konuları: Bir şeyi belirli bir şekilde YAPABİLECEĞİNİZ, o şekilde yapmanız GEREKEN anlamına gelmez. Perl, size her şeyi yapmanın birkaç yolunu sunmak için tasarlanmıştır, bu nedenle en okunaklı olanı seçmeyi düşünün. Örneğin -

open(FOO,$foo) || die "Can't open $foo: $!";

Daha iyi -

die "Can't open $foo: $!" unless open(FOO,$foo);

Çünkü ikinci yol, ifadenin ana noktasını bir değiştiricide gizler. Diğer yandan,

print "Starting analysis\n" if $verbose;

Daha iyi -

$verbose && print "Starting analysis\n";

Çünkü asıl mesele kullanıcının -v yazıp yazmaması değil.

Perl son operatörü sağladığında, ortadan çıkabilmeniz için üstte veya altta bir döngüden çıkmak için aptalca bükülmelerden geçmeyin. Daha görünür hale getirmek için biraz "aşın" -

LINE:
for (;;) {
   statements;
   last LINE if $foo;
   next LINE if /^#/;
   statements;
}

Birkaç önemli noktayı daha görelim -

  • Döngü etiketleri kullanmaktan korkmayın - okunabilirliği artırmak ve çok düzeyli döngü sonlarına izin vermek için oradalar. Önceki örneğe bakın.

  • Grep () (veya map ()) veya "ters işaretler" i geçersiz bir bağlamda kullanmaktan kaçının, yani, dönüş değerlerini attığınızda. Bu fonksiyonların hepsinin dönüş değerleri vardır, bu yüzden onları kullanın. Aksi takdirde bunun yerine foreach () döngüsü veya system () işlevini kullanın.

  • Taşınabilirlik için, her makinede uygulanamayacak özellikleri kullanırken, başarısız olup olmadığını görmek için yapıyı bir eval içinde test edin. Belirli bir özelliğin hangi sürüm veya yama düzeyinin uygulandığını biliyorsanız, orada olup olmayacağını görmek için $] (İngilizce'de $ PERL_VERSION) test edebilirsiniz. Config modülü, Perl kurulduğunda Configure programı tarafından belirlenen değerleri sorgulamanıza da izin verir.

  • Anımsatıcı tanımlayıcıları seçin. Anımsatmanın ne anlama geldiğini hatırlayamıyorsanız, bir sorununuz var demektir.

  • $ Gotit gibi kısa tanımlayıcılar muhtemelen uygun olsa da, daha uzun tanımlayıcılardaki kelimeleri ayırmak için alt çizgi kullanın. Okuması genellikle daha kolaydır$var_names_like_this than $VarNamesLikeThis, özellikle ana dili İngilizce olmayanlar için. Ayrıca, VAR_NAMES_LIKE_THIS ile tutarlı olarak çalışan basit bir kuraldır.

  • Paket adları bazen bu kuralın bir istisnasıdır. Perl, tamsayı ve katı gibi "pragma" modülleri için küçük harfli modül isimlerini gayri resmi olarak ayırır. Diğer modüller büyük harfle başlamalı ve karışık büyük / küçük harf kullanmalıdır, ancak ilkel dosya sistemlerinin modül adlarının birkaç seyrek bayta sığması gereken dosyalar olarak temsillerindeki sınırlamalar nedeniyle muhtemelen alt çizgi içermemelidir.

  • Eğer gerçekten tüylü bir normal ifadeniz varsa, / x değiştiricisini kullanın ve biraz daha az satır gürültüsü gibi görünmesi için biraz boşluk koyun. Normal ifadenizde eğik çizgi veya ters eğik çizgi varsa ayırıcı olarak eğik çizgi kullanmayın.

  • Her zaman sistem çağrılarının dönüş kodlarını kontrol edin. İyi hata mesajları STDERR'a gitmeli, soruna hangi programın neden olduğunu, başarısız sistem çağrısının ve argümanların neler olduğunu ve (ÇOK ÖNEMLİ) neyin yanlış gittiğine dair standart sistem hata mesajını içermelidir. İşte basit ama yeterli bir örnek -

opendir(D, $dir) or die "can't opendir $dir: $!";
  • Yeniden kullanılabilirliği düşünün. Böyle bir şeyi tekrar yapmak isterken neden beyin gücünü tek seferde harcayasın ki? Kodunuzu genellemeyi düşünün. Bir modül veya nesne sınıfı yazmayı düşünün. Sıkı kullanımla kodunuzun temiz çalışmasını sağlayın ve geçerli uyarılar (veya -w) kullanın. Kodunuzu başkasına vermeyi düşünün. Tüm dünya görüşünüzü değiştirmeyi düşünün. Düşünün ... oh, boşver.

  • Tutarlı olun.

  • Nazik ol.

Normal ifade, görüntülemekte olduğunuz kalıbı veya kalıpları tanımlayan bir karakter dizisidir. Perl'deki normal ifadelerin sözdizimi, diğer düzenli ifadelerde bulacağınıza çok benzer. Destekleme programları, örneğinsed, grep, ve awk.

Normal bir ifade uygulamanın temel yöntemi, desen bağlama operatörlerini kullanmaktır = ~ ve !~. İlk operatör bir test ve atama operatörüdür.

Perl içinde üç düzenli ifade operatörü vardır.

  • Normal İfadeyi Eşleştir - m //
  • Normal İfadeyi Değiştir - s ///
  • Normal İfadeyi Transliterate - tr ///

Her durumda eğik çizgi, belirttiğiniz normal ifade (regex) için sınırlayıcı görevi görür. Başka bir sınırlayıcıdan memnunsanız, eğik çizgi yerine kullanabilirsiniz.

Maç Operatörü

Eşleştirme operatörü m //, bir dizeyi veya ifadeyi normal ifadeyle eşleştirmek için kullanılır. Örneğin, "foo" karakter dizisini skaler $ çubuğu ile eşleştirmek için şuna benzer bir ifade kullanabilirsiniz -

#!/usr/bin/perl

$bar = "This is foo and again foo"; if ($bar =~ /foo/) {
   print "First time is matching\n";
} else {
   print "First time is not matching\n";
}

$bar = "foo"; if ($bar =~ /foo/) {
   print "Second time is matching\n";
} else {
   print "Second time is not matching\n";
}

Yukarıdaki program yürütüldüğünde, aşağıdaki sonucu verir -

First time is matching
Second time is matching

M // aslında q // operatör serisiyle aynı şekilde çalışır. İfade için sınırlayıcı görevi görmek için doğal olarak eşleşen karakterlerin herhangi bir kombinasyonunu kullanabilirsiniz. Örneğin, m {}, m () ve m> <hepsi geçerlidir. Dolayısıyla yukarıdaki örnek aşağıdaki gibi yeniden yazılabilir -

#!/usr/bin/perl

$bar = "This is foo and again foo"; if ($bar =~ m[foo]) {
   print "First time is matching\n";
} else {
   print "First time is not matching\n";
}

$bar = "foo"; if ($bar =~ m{foo}) {
   print "Second time is matching\n";
} else {
   print "Second time is not matching\n";
}

Sınırlayıcılar eğik çizgi ise m // 'den atlayabilirsiniz, ancak diğer tüm sınırlayıcılar için m önekini kullanmanız gerekir.

= ~ Veya! ~ İfadesinin solundaki ifade olan tüm eşleşme ifadesinin ve eşleştirme operatörünün, ifade eşleşirse true (skaler bağlamda) döndürdüğünü unutmayın. Bu nedenle ifade -

$true = ($foo =~ m/foo/);

ayarlanacak $true to 1 if $foo normal ifadeyle eşleşir veya eşleşme başarısız olursa 0 olur. Bir liste bağlamında eşleşme, gruplanmış ifadelerin içeriğini döndürür. Örneğin, bir zaman dizesinden saatleri, dakikaları ve saniyeleri çıkarırken, kullanabiliriz -

my ($hours, $minutes, $seconds) = ($time =~ m/(\d+):(\d+):(\d+)/);

Maç İşleci Değiştiricileri

Eşleştirme operatörü kendi değiştiricilerini destekler. / G değiştiricisi global eşlemeye izin verir. / İ değiştiricisi, eşleşmeyi büyük / küçük harf duyarlı hale getirecektir. İşte değiştiricilerin tam listesi

Sr.No. Değiştirici ve Açıklama
1

i

Maçı büyük / küçük harf duyarlı hale getirir.

2

m

Dizede satırsonu veya satır başı karakterleri varsa, ^ ve $ operatörlerinin artık bir dize sınırı yerine yeni satır sınırıyla eşleşeceğini belirtir.

3

o

İfadeyi yalnızca bir kez değerlendirir.

4

s

Kullanımına izin verir. yeni satır karakteriyle eşleşecek şekilde.

5

x

İfadede netlik için beyaz boşluk kullanmanıza izin verir.

6

g

Global olarak tüm eşleşmeleri bulur.

7

cg

Genel bir maç başarısız olduktan sonra bile aramanın devam etmesine izin verir.

Yalnızca Bir Kez Eşleştirme

Maç operatörünün daha basit bir versiyonu da var -? PATTERN? Şebeke. Bu, temelde m // operatörüyle aynıdır, tek fark, sıfırlanacak her çağrı arasında aradığınız dize içinde yalnızca bir kez eşleşir.

Örneğin, bir listedeki ilk ve son öğeleri almak için bunu kullanabilirsiniz -

#!/usr/bin/perl

@list = qw/food foosball subeo footnote terfoot canic footbrdige/;

foreach (@list) {
   $first = $1 if /(foo.*?)/; $last = $1 if /(foo.*)/; } print "First: $first, Last: $last\n";

Yukarıdaki program yürütüldüğünde, aşağıdaki sonucu verir -

First: foo, Last: footbrdige

Normal İfade Değişkenleri

Normal ifade değişkenleri şunları içerir: $, eşleşen son gruplandırma ne varsa içerir; $&, eşleşen dizenin tamamını içeren; $`, eşleşen dizeden önceki her şeyi içeren; ve$', eşleşen dizeden sonraki her şeyi içeren. Aşağıdaki kod sonucu gösterir -

#!/usr/bin/perl

$string = "The food is in the salad bar";
$string =~ m/foo/; print "Before: $`\n";
print "Matched: $&\n"; print "After: $'\n";

Yukarıdaki program yürütüldüğünde, aşağıdaki sonucu verir -

Before: The
Matched: foo
After: d is in the salad bar

İkame Operatörü

İkame operatörü, s ///, gerçekten eşleşen metni yeni bir metinle değiştirmenize izin veren eşleştirme operatörünün bir uzantısıdır. Operatörün temel şekli -

s/PATTERN/REPLACEMENT/;

PATTERN, aradığımız metnin normal ifadesidir. DEĞİŞTİRME, bulunan metni değiştirmek için kullanmak istediğimiz metin veya normal ifade için bir belirtimdir. Örneğin, tüm oluşumlarını değiştirebilirizdog ile cat aşağıdaki normal ifadeyi kullanarak -

#/user/bin/perl

$string = "The cat sat on the mat"; $string =~ s/cat/dog/;

print "$string\n";

Yukarıdaki program yürütüldüğünde, aşağıdaki sonucu verir -

The dog sat on the mat

Değiştirme Operatörü Değiştiricileri

İkame operatörü ile kullanılan tüm değiştiricilerin listesi aşağıdadır.

Sr.No. Değiştirici ve Açıklama
1

i

Maçı büyük / küçük harf duyarlı hale getirir.

2

m

Dizede satırsonu veya satır başı karakterleri varsa, ^ ve $ operatörlerinin artık bir dize sınırı yerine yeni satır sınırıyla eşleşeceğini belirtir.

3

o

İfadeyi yalnızca bir kez değerlendirir.

4

s

Kullanımına izin verir. yeni satır karakteriyle eşleşecek şekilde.

5

x

İfadede netlik için beyaz boşluk kullanmanıza izin verir.

6

g

Bulunan ifadenin tüm yinelemelerini yeni metinle değiştirir.

7

e

Değiştirmeyi bir Perl ifadesiymiş gibi değerlendirir ve dönüş değerini değiştirme metni olarak kullanır.

Çeviri Operatörü

Tercüme, ikame ilkelerine benzer, ancak aynı değildir, ancak ikameden farklı olarak, çeviri (veya transliterasyon), ikame değerlerinin aranması için normal ifadeler kullanmaz. Çeviri operatörleri -

tr/SEARCHLIST/REPLACEMENTLIST/cds
y/SEARCHLIST/REPLACEMENTLIST/cds

Çeviri, ARAMA LİSTESİ’ndeki tüm karakterleri DEĞİŞTİRME LİSTESİ’ndeki karşılık gelen karakterlerle değiştirir. Örneğin, "Kedi paspasın üzerine oturdu." Bu bölümde kullandığımız dizge -

#/user/bin/perl

$string = 'The cat sat on the mat'; $string =~ tr/a/o/;

print "$string\n";

Yukarıdaki program yürütüldüğünde, aşağıdaki sonucu verir -

The cot sot on the mot.

Standart Perl aralıkları da kullanılabilir, bu da karakter aralıklarını harf veya sayısal değere göre belirlemenize olanak tanır. Dizenin durumunu değiştirmek için, yerine aşağıdaki sözdizimini kullanabilirsiniz.uc işlevi.

$string =~ tr/a-z/A-Z/;

Çeviri Operatörü Değiştiricileri

Çeviri ile ilgili operatörlerin listesi aşağıdadır.

Sr.No. Değiştirici ve Açıklama
1

c

ARAMA LİSTESİ'ni tamamlar.

2

d

Bulunan ancak değiştirilmemiş karakterleri siler.

3

s

Squash'lar değiştirilen karakterleri kopyalar.

/ D değiştiricisi, DEĞİŞTİRME LİSTESİ'nde karşılık gelen bir girişi olmayan SEARCHLIST ile eşleşen karakterleri siler. Örneğin -

#!/usr/bin/perl 

$string = 'the cat sat on the mat.'; $string =~ tr/a-z/b/d;

print "$string\n";

Yukarıdaki program yürütüldüğünde, aşağıdaki sonucu verir -

b b   b.

Son değiştirici, / s, değiştirilen karakterlerin yinelenen dizilerini kaldırır, bu nedenle -

#!/usr/bin/perl

$string = 'food';
$string = 'food'; $string =~ tr/a-z/a-z/s;

print "$string\n";

Yukarıdaki program yürütüldüğünde, aşağıdaki sonucu verir -

fod

Daha Karmaşık Normal İfadeler

Sadece sabit dizelerle eşleştirmek zorunda değilsiniz. Aslında, daha karmaşık normal ifadeler kullanarak hayal edebileceğiniz hemen hemen her şeyle eşleştirebilirsiniz. İşte hızlı bir hile sayfası -

Aşağıdaki tablo Python'da bulunan normal ifade sözdizimini listeler.

Sr.No. Desen ve Açıklama
1

^

Satırın başıyla eşleşir.

2

$

Satırın sonuyla eşleşir.

3

.

Yeni satır hariç herhangi bir tek karakterle eşleşir. M seçeneğini kullanmak, satırsonu ile eşleşmesine de izin verir.

4

[...]

Parantez içindeki herhangi bir tek karakterle eşleşir.

5

[^...]

Parantez içinde olmayan herhangi bir tek karakterle eşleşir.

6

*

Önceki ifadenin 0 veya daha fazla oluşumuyla eşleşir.

7

+

Önceki ifadenin 1 veya daha fazla oluşumuyla eşleşir.

8

?

Önceki ifadenin 0 veya 1 oluşumuyla eşleşir.

9

{ n}

Önceki ifadenin tam olarak n sayıda oluşumuyla eşleşir.

10

{ n,}

Önceki ifadenin n veya daha fazla oluşumuyla eşleşir.

11

{ n, m}

Önceki ifadenin en az n ve en çok m oluşumuyla eşleşir.

12

a| b

A veya b ile eşleşir.

13

\w

Kelime karakterleriyle eşleşir.

14

\W

Sözcük olmayan karakterlerle eşleşir.

15

\s

Boşluklarla eşleşir. [\ T \ n \ r \ f] ile eşdeğerdir.

16

\S

Beyaz olmayan boşlukla eşleşir.

17

\d

Rakamlarla eşleşir. [0-9] ile eşdeğerdir.

18

\D

Sayı olmayanlarla eşleşir.

19

\A

Dizenin başıyla eşleşir.

20

\Z

Dizenin sonuyla eşleşir. Bir satırsonu varsa, yeni satırdan hemen önce eşleşir.

21

\z

Dizenin sonuyla eşleşir.

22

\G

Maçlar son maçın bittiği yeri gösterir.

23

\b

Köşeli parantezlerin dışındayken kelime sınırlarıyla eşleşir. Parantez içindeyken geri boşlukla (0x08) eşleşir.

24

\B

Kelime olmayan sınırlarla eşleşir.

25

\n, \t, etc.

Yeni satırlarla, satır başlarıyla, sekmelerle vb. Eşleşir.

26

\1...\9

N'inci gruplanmış alt ifadeyle eşleşir.

27

\10

Zaten eşleşiyorsa, n'inci gruplanmış alt ifadeyle eşleşir. Aksi takdirde, bir karakter kodunun sekizlik temsilini ifade eder.

28

[aeiou]

Verilen kümedeki tek bir karakterle eşleşir

29

[^aeiou]

Verilen kümenin dışındaki tek bir karakterle eşleşir

^ Meta karakteri dizenin başıyla eşleşir ve $ meta simgesi dizenin sonuyla eşleşir. İşte bazı kısa örnekler.

# nothing in the string (start and end are adjacent)
/^$/   

# a three digits, each followed by a whitespace
# character (eg "3 4 5 ")
/(\d\s) {3}/  

# matches a string in which every
# odd-numbered letter is a (eg "abacadaf")
/(a.)+/  

# string starts with one or more digits
/^\d+/

# string that ends with one or more digits
/\d+$/

Başka bir örneğe bakalım.

#!/usr/bin/perl

$string = "Cats go Catatonic\nWhen given Catnip";
($start) = ($string =~ /\A(.*?) /);
@lines = $string =~ /^(.*?) /gm; print "First word: $start\n","Line starts: @lines\n";

Yukarıdaki program yürütüldüğünde, aşağıdaki sonucu verir -

First word: Cats
Line starts: Cats When

Eşleşen Sınırlar

\b\ w sınıfı ve \ W sınıfı arasındaki farkla tanımlanan herhangi bir sözcük sınırında eşleşir. \ W bir sözcüğün karakterlerini içerdiğinden ve \ W bunun tersini içerdiğinden, bu normalde bir sözcüğün sonlandırılması anlamına gelir. \Biddia, kelime sınırı olmayan herhangi bir konumla eşleşir. Örneğin -

/\bcat\b/ # Matches 'the cat sat' but not 'cat on the mat'
/\Bcat\B/ # Matches 'verification' but not 'the cat on the mat'
/\bcat\B/ # Matches 'catatonic' but not 'polecat'
/\Bcat\b/ # Matches 'polecat' but not 'catatonic'

Alternatiflerin Seçilmesi

| karakter, Perl içindeki standart veya bitsel VEYA gibidir. Normal bir ifade veya grup içindeki alternatif eşleşmeleri belirtir. Örneğin, bir ifadede "kedi" veya "köpek" i eşleştirmek için şunu kullanabilirsiniz -

if ($string =~ /cat|dog/)

Karmaşık eşleşmeleri desteklemek için bir ifadenin tek tek öğelerini gruplayabilirsiniz. İki kişinin ismini aramak, bunun gibi iki ayrı testle sağlanabilir -

if (($string =~ /Martin Brown/) ||  ($string =~ /Sharon Brown/)) This could be written as follows if ($string =~ /(Martin|Sharon) Brown/)

Gruplama Eşlemesi

Düzenli ifade açısından bakıldığında, belki de birincisinin biraz daha net olması dışında hiçbir fark yoktur.

$string =~ /(\S+)\s+(\S+)/; and $string =~ /\S+\s+\S+/;

Bununla birlikte, gruplamanın yararı, normal bir ifadeden bir dizi çıkarmamıza izin vermesidir. Gruplamalar, orijinalde göründükleri sıraya göre bir liste olarak döndürülür. Örneğin, aşağıdaki parçada bir dizeden saatleri, dakikaları ve saniyeleri çıkardık.

my ($hours, $minutes, $seconds) = ($time =~ m/(\d+):(\d+):(\d+)/);

Bu doğrudan yöntemin yanı sıra, eşleşen gruplar özel $ x değişkenleri içinde de mevcuttur; burada x, normal ifade içindeki grubun numarasıdır. Bu nedenle, önceki örneği aşağıdaki gibi yeniden yazabiliriz -

#!/usr/bin/perl

$time = "12:05:30";

$time =~ m/(\d+):(\d+):(\d+)/; my ($hours, $minutes, $seconds) = ($1, $2, $3); print "Hours : $hours, Minutes: $minutes, Second: $seconds\n";

Yukarıdaki program yürütüldüğünde, aşağıdaki sonucu verir -

Hours : 12, Minutes: 05, Second: 30

İkame ifadelerinde gruplar kullanıldığında, $ x sözdizimi değiştirme metninde kullanılabilir. Böylece, bunu kullanarak bir tarih dizesini yeniden biçimlendirebiliriz -

#!/usr/bin/perl

$date = '03/26/1999';
$date =~ s#(\d+)/(\d+)/(\d+)#$3/$1/$2#;

print "$date\n";

Yukarıdaki program yürütüldüğünde, aşağıdaki sonucu verir -

1999/03/26

\ G Assertion

\ G ifadesi, son eşleşmenin meydana geldiği noktadan aramaya devam etmenize olanak sağlar. Örneğin, aşağıdaki kodda, daha karmaşık, tek bir normal ifade oluşturmak zorunda kalmadan, doğru konumu arayabilmek ve sonra bazı bilgileri çıkarabilmek için \ G kullandık -

#!/usr/bin/perl

$string = "The time is: 12:31:02 on 4/12/00";

$string =~ /:\s+/g; ($time) = ($string =~ /\G(\d+:\d+:\d+)/); $string =~ /.+\s+/g;
($date) = ($string =~ m{\G(\d+/\d+/\d+)});

print "Time: $time, Date: $date\n";

Yukarıdaki program yürütüldüğünde, aşağıdaki sonucu verir -

Time: 12:31:02, Date: 4/12/00

\ G ifadesi aslında pos işlevinin yalnızca meta sembol eşdeğeridir, bu nedenle normal ifade çağrıları arasında pos'u kullanmaya devam edebilir ve hatta pos'u lvalue alt yordamı olarak kullanarak pos'un değerini (ve dolayısıyla \ G) değiştirebilirsiniz.

Normal ifade Örnekleri

Değişmez Karakterler

Sr.No. Örnek ve Açıklama
1

Perl

"Perl" ile eşleş.

Karakter Sınıfları

Sr.No. Örnek ve Açıklama
1

[Pp]ython

"Python" veya "python" ile eşleşir

2

rub[ye]

"Ruby" veya "rube" ile eşleşir

3

[aeiou]

Herhangi bir küçük harfle eşleşir

4

[0-9]

Herhangi bir rakamla eşleşir; [0123456789] ile aynı

5

[a-z]

Herhangi bir küçük ASCII harfiyle eşleşir

6

[A-Z]

Herhangi bir büyük ASCII harfiyle eşleşir

7

[a-zA-Z0-9]

Yukarıdakilerden herhangi biriyle eşleşir

8

[^aeiou]

Küçük harfli ünlü dışında herhangi bir şeyle eşleşir

9

[^0-9]

Rakam dışında herhangi bir şeyle eşleşir

Özel Karakter Sınıfları

Sr.No. Örnek ve Açıklama
1

.

Yeni satır hariç herhangi bir karakterle eşleşir

2

\d

Bir rakamla eşleşir: [0-9]

3

\D

Sayı olmadan eşleşir: [^ 0-9]

4

\s

Bir boşluk karakteriyle eşleşir: [\ t \ r \ n \ f]

5

\S

Beyaz olmayan alanla eşleşir: [^ \ t \ r \ n \ f]

6

\w

Tek bir kelime karakteriyle eşleşir: [A-Za-z0-9_]

7

\W

Sözcük olmayan bir karakterle eşleşir: [^ A-Za-z0-9_]

Tekrarlama Durumları

Sr.No. Örnek ve Açıklama
1

ruby?

"Ovmak" veya "yakut" ile eşleşir: y isteğe bağlıdır

2

ruby*

"Ovmak" artı 0 veya daha fazla y ile eşleşir

3

ruby+

"Ovmak" artı 1 veya daha fazla y ile eşleşir

4

\d{3}

Tam olarak 3 rakamla eşleşir

5

\d{3,}

3 veya daha fazla rakamla eşleşir

6.

\d{3,5}

3, 4 veya 5 basamakla eşleşir

Kararsız Tekrar

Bu, en az sayıda tekrarla eşleşir -

Sr.No. Örnek ve Açıklama
1

<.*>

Açgözlü tekrar: "<python> perl>" ile eşleşir

2

<.*?>

Nongreedy: "<python> perl>" içindeki "<python>" ile eşleşir

Parantezlerle Gruplama

Sr.No. Örnek ve Açıklama
1

\D\d+

Grup yok: + tekrarlar \ d

2

(\D\d)+

Gruplanmış: + tekrarlar \ D \ d çifti

3

([Pp]ython(, )?)+

"Python", "Python, python, python" vb. İle eşleştirin.

Geri referanslar

Bu, daha önce eşleşen bir grupla tekrar eşleşiyor -

Sr.No. Örnek ve Açıklama
1

([Pp])ython&\1ails

Python & pails veya Python & Pails ile eşleşir

2

(['"])[^\1]*\1

Tek veya çift tırnaklı dize. \ 1, 1. grubun eşleştiği şeyle eşleşir. \ 2 eşleştiği 2. grupla eşleşir vb.

Alternatifler

Sr.No. Örnek ve Açıklama
1

python|perl

"Python" veya "perl" ile eşleşir

2

rub(y|le))

"Yakut" veya "ruble" ile eşleşir

3

Python(!+|\?)

"Python" ve ardından bir veya daha fazla! veya bir?

Çapalar

Bunun, eşleşme konumlarını belirtmesi gerekir.

Sr.No. Örnek ve Açıklama
1

^Python

Bir dizenin veya dahili satırın başında "Python" ile eşleşir

2

Python$

Bir dizenin veya satırın sonundaki "Python" ile eşleşir

3

\APython

Bir dizenin başında "Python" ile eşleşir

4

Python\Z

Bir dizenin sonundaki "Python" ile eşleşir

5

\bPython\b

Kelime sınırında "Python" ile eşleşir

6

\brub\B

\ B kelime dışı sınırdır: "rube" ve "ruby" de "ovma" ile eşleşir, ancak tek başına değil

7

Python(?=!)

Bir ünlem işaretinin ardından "Python" ile eşleşir

8

Python(?!!)

Ardından ünlem işareti gelmiyorsa "Python" ile eşleşir

Parantez İçeren Özel Sözdizimi

Sr.No. Örnek ve Açıklama
1

R(?#comment)

"R" ile eşleşir. Geri kalan her şey bir yorum

2

R(?i)uby

"Uby" ile eşleşirken büyük / küçük harfe duyarlı değil

3

R(?i:uby)

Yukarıdaki gibi

4

rub(?:y|le))

Yalnızca \ 1 geri referans oluşturmadan grupla

Sendmail Yardımcı Programını Kullanma

Düz Mesaj Gönderme

Linux / Unix makinesinde çalışıyorsanız, basitçe kullanabilirsiniz sendmailE-posta göndermek için Perl programınızın içindeki yardımcı program. İşte belirli bir e-posta kimliğine e-posta gönderebilen örnek bir komut dosyası. Sendmail yardımcı programı için verilen yolun doğru olduğundan emin olun. Bu, Linux / Unix makineniz için farklı olabilir.

#!/usr/bin/perl
 
$to = '[email protected]';
$from = '[email protected]'; $subject = 'Test Email';
$message = 'This is test email sent by Perl Script'; open(MAIL, "|/usr/sbin/sendmail -t"); # Email Header print MAIL "To: $to\n";
print MAIL "From: $from\n"; print MAIL "Subject: $subject\n\n";
# Email Body
print MAIL $message;

close(MAIL);
print "Email Sent Successfully\n";

Aslında, yukarıdaki komut dosyası, e-postayı hazırlayacak ve Linux / Unix makinenizde yerel olarak çalışan sunucuya gönderecek bir istemci e-posta betiğidir. Bu komut dosyası, gerçek hedefe e-posta göndermekten sorumlu olmayacaktır. Bu nedenle, verilen e-posta kimliğine e-posta göndermek için e-posta sunucusunun düzgün şekilde yapılandırıldığından ve makinenizde çalıştığından emin olmalısınız.

HTML Mesajı Gönderme

Sendmail kullanarak HTML formatlı e-posta göndermek istiyorsanız, tek yapmanız gereken Content-type: text/html\n e-postanın başlık kısmında aşağıdaki gibi -

#!/usr/bin/perl
 
$to = '[email protected]';
$from = '[email protected]'; $subject = 'Test Email';
$message = '<h1>This is test email sent by Perl Script</h1>'; open(MAIL, "|/usr/sbin/sendmail -t"); # Email Header print MAIL "To: $to\n";
print MAIL "From: $from\n"; print MAIL "Subject: $subject\n\n";
print MAIL "Content-type: text/html\n";
# Email Body
print MAIL $message;

close(MAIL);
print "Email Sent Successfully\n";

MIME :: Lite Modülünü Kullanma

Windows makinesinde çalışıyorsanız, sendmail yardımcı programına erişiminiz olmayacaktır. Ancak, MIME: Lite perl modülünü kullanarak kendi e-posta istemcinizi yazmak için bir alternatifiniz var. Bu modülü MIME-Lite-3.01.tar.gz'den indirebilir ve Windows veya Linux / Unix makinenize kurabilirsiniz. Yüklemek için basit adımları izleyin -

$tar xvfz MIME-Lite-3.01.tar.gz
$cd MIME-Lite-3.01 $perl Makefile.PL
$make $make install

İşte bu ve makinenizde MIME :: Lite modülü kurulu olacak. Artık e-postanızı aşağıda açıklanan basit komut dosyalarıyla göndermeye hazırsınız.

Düz Mesaj Gönderme

Şimdi, verilen e-posta kimliğine e-posta göndermeyle ilgilenecek bir komut dosyası var -

#!/usr/bin/perl
use MIME::Lite;
 
$to = '[email protected]'; $cc = '[email protected]';
$from = '[email protected]'; $subject = 'Test Email';
$message = 'This is test email sent by Perl Script'; $msg = MIME::Lite->new(
                 From     => $from, To => $to,
                 Cc       => $cc, Subject => $subject,
                 Data     => $message ); $msg->send;
print "Email Sent Successfully\n";

HTML Mesajı Gönderme

Sendmail kullanarak HTML formatlı e-posta göndermek istiyorsanız, tek yapmanız gereken Content-type: text/html\ne-postanın başlık kısmında. Aşağıda, HTML formatlı e-posta göndermeyle ilgilenecek komut dosyası verilmiştir -

#!/usr/bin/perl
use MIME::Lite;
 
$to = '[email protected]'; $cc = '[email protected]';
$from = '[email protected]'; $subject = 'Test Email';
$message = '<h1>This is test email sent by Perl Script</h1>'; $msg = MIME::Lite->new(
                 From     => $from, To => $to,
                 Cc       => $cc, Subject => $subject,
                 Data     => $message ); $msg->attr("content-type" => "text/html");         
$msg->send;
print "Email Sent Successfully\n";

Bir Ek Gönderme

Bir ek göndermek istiyorsanız, aşağıdaki komut dosyası amaca hizmet eder -

#!/usr/bin/perl
use MIME::Lite;
 
$to = '[email protected]';
$cc = '[email protected]'; $from = '[email protected]';
$subject = 'Test Email'; $message = 'This is test email sent by Perl Script';

$msg = MIME::Lite->new( From => $from,
                 To       => $to, Cc => $cc,
                 Subject  => $subject, Type => 'multipart/mixed' ); # Add your text message. $msg->attach(Type         => 'text',
             Data         => $message ); # Specify your file as attachement. $msg->attach(Type         => 'image/gif',
             Path         => '/tmp/logo.gif',
             Filename     => 'logo.gif',
             Disposition  => 'attachment'
            );       
$msg->send;
print "Email Sent Successfully\n";

Attach () yöntemini kullanarak e-postanıza istediğiniz kadar dosya ekleyebilirsiniz.

SMTP Sunucusunu Kullanma

Makineniz bir e-posta sunucusu çalıştırmıyorsa, uzak konumda bulunan başka herhangi bir e-posta sunucusunu kullanabilirsiniz. Ancak başka bir e-posta sunucusunu kullanmak için bir id, şifresi, URL'si vb. Olması gerekir. Gerekli tüm bilgilere sahip olduğunuzda, bu bilgilerisend() yöntem aşağıdaki gibidir -

$msg->send('smtp', "smtp.myisp.net", AuthUser=>"id", AuthPass=>"password" );

Yukarıdaki bilgileri kullanmak için e-posta sunucusu yöneticinizle iletişime geçebilirsiniz ve bir kullanıcı kimliği ve şifresi zaten mevcut değilse, yöneticiniz dakikalar içinde oluşturabilir.

Soket nedir?

Soket, farklı işlemler arasında sanal çift yönlü bağlantı oluşturan bir Berkeley UNIX mekanizmasıdır. Bu daha sonra, farklı işletim sistemi yazılımları üzerinde çalışan coğrafi konum boyunca sistemler arasında iletişimi sağlayan bilinen her işletim sistemine aktarıldı. Soket olmasaydı, sistemler arasındaki ağ iletişiminin çoğu asla olmayacaktı.

Daha yakından bakmak; bir ağdaki tipik bir bilgisayar sistemi, üzerinde çalışan çeşitli uygulamaların istediği şekilde bilgi alır ve gönderir. Bu bilgiler, kendisine benzersiz bir IP adresi atandığı için sisteme yönlendirilir. Sistem üzerinde bu bilgiler farklı portlardan dinleyen ilgili uygulamalara verilmektedir. Örneğin bir internet tarayıcısı, web sunucusundan alınan bilgi için port 80'i dinler. Ayrıca belirli bir port numarası hakkında dinleyen ve bilgi gönderen / alan özel uygulamalarımızı yazabiliriz.

Şimdilik, bir soketin bir IP adresi ve bir bağlantı noktası olduğunu ve bağlantının bir ağ üzerinden veri gönderip almasını sağlayan bir bağlantı olduğunu özetleyelim.

Yukarıda bahsedilen soket kavramını açıklamak için, Perl kullanarak İstemci - Sunucu Programlama örneğini alacağız. Bir istemci sunucu mimarisini tamamlamak için aşağıdaki adımları izlememiz gerekir -

Sunucu Oluşturmak İçin

  • Kullanarak bir soket oluşturun socket aramak.

  • Soketi kullanarak bir port adresine bağlayın. bind aramak.

  • Port adresindeki soketi kullanarak dinleyin. listen aramak.

  • İstemci bağlantılarını kullanarak kabul edin accept aramak.

Müşteri Oluşturmak İçin

  • İle bir soket oluşturun socket aramak.

  • (Soketi) kullanarak sunucuya bağlayın connect aramak.

Aşağıdaki şema, İstemci ve Sunucu tarafından birbirleriyle iletişim kurmak için kullanılan aramaların tam sırasını göstermektedir -

Sunucu Tarafı Soket Çağrıları

Soket () çağrısı

socket()çağrı, bir ağ bağlantısı kurarken ilk çağrı bir soket oluşturmaktır. Bu çağrı aşağıdaki sözdizimine sahiptir -

socket( SOCKET, DOMAIN, TYPE, PROTOCOL );

Yukarıdaki çağrı bir SOKET oluşturur ve diğer üç bağımsız değişken, TCP / IP bağlantıları için aşağıdaki değerlere sahip olması gereken tam sayılardır.

  • DOMAINPF_INET olmalıdır. Bilgisayarınızda muhtemelen 2'dir.

  • TYPE TCP / IP bağlantısı için SOCK_STREAM olmalıdır.

  • PROTOCOL olmalı (getprotobyname('tcp'))[2]. Soket üzerinden konuşulacak TCP gibi belirli bir protokoldür.

Dolayısıyla, sunucu tarafından verilen soket işlevi çağrısı şuna benzer -

use Socket     # This defines PF_INET and SOCK_STREAM

socket(SOCKET,PF_INET,SOCK_STREAM,(getprotobyname('tcp'))[2]);

Bind () çağrısı

Socket () çağrısı tarafından oluşturulan soketler, bir ana bilgisayar adına ve bir bağlantı noktası numarasına bağlanana kadar işe yaramaz. Sunucu aşağıdakileri kullanırbind() istemcilerden gelen bağlantıları kabul edecekleri bağlantı noktasını belirtmek için işlev.

bind( SOCKET, ADDRESS );

Burada SOCKET, socket () çağrısı tarafından döndürülen tanımlayıcıdır ve ADDRESS, üç öğe içeren bir soket adresidir (TCP / IP için) -

  • Adres ailesi (TCP / IP için, bu AF_INET, muhtemelen sisteminizde 2'dir).

  • Bağlantı noktası numarası (örneğin 21).

  • Bilgisayarın internet adresi (örneğin 10.12.12.168).

Bind (), kendi adresini bilmesi gerekmeyen bir sunucu tarafından kullanıldığı için argüman listesi şöyle görünür -

use Socket        # This defines PF_INET and SOCK_STREAM

$port = 12345; # The unique port used by the sever to listen requests $server_ip_address = "10.12.12.168";
bind( SOCKET, pack_sockaddr_in($port, inet_aton($server_ip_address)))
   or die "Can't bind to port $port! \n";

or die cümleciği çok önemlidir, çünkü bir sunucu bekleyen bağlantılar olmadan ölürse, SO_REUSEADDR seçeneğini kullanmadığınız sürece bağlantı noktası hemen yeniden kullanılamaz. setsockopt()işlevi. Burayapack_sockaddr_in() işlevi, Bağlantı Noktası ve IP adresini ikili biçime paketlemek için kullanılıyor.

Listen () çağrısı

Bu bir sunucu programı ise, bir çağrı yapılması gerekir. listen()belirtilen bağlantı noktasında dinlemek, yani gelen istekleri beklemek. Bu çağrı aşağıdaki sözdizimine sahiptir -

listen( SOCKET, QUEUESIZE );

Yukarıdaki çağrı, socket () çağrısı tarafından döndürülen SOCKET tanımlayıcısını kullanır ve QUEUESIZE, aynı anda izin verilen maksimum bekleyen bağlantı isteği sayısıdır.

Kabul () çağrısı

Bu bir sunucu programı ise, o zaman access()gelen bağlantıları kabul etme işlevi. Bu çağrı aşağıdaki sözdizimine sahiptir -

accept( NEW_SOCKET, SOCKET );

Kabul çağrısı, socket () işlevi tarafından döndürülen SOCKET tanımlayıcısını alır ve başarıyla tamamlandığında, istemci ile sunucu arasındaki gelecekteki tüm iletişim için yeni bir soket tanımlayıcısı NEW_SOCKET döndürülür. Access () çağrısı başarısız olursa, başlangıçta kullandığımız Socket modülünde tanımlanan FLASE'i döndürür.

Genellikle kabul etmek () sonsuz bir döngüde kullanılır. Bir bağlantı ulaşır ulaşmaz sunucu ya onunla başa çıkmak için bir alt süreç yaratır ya da kendisine hizmet eder ve daha sonra daha fazla bağlantı için dinlemeye geri döner.

while(1) {
   accept( NEW_SOCKET, SOCKT );
   .......
}

Şimdi sunucu ile ilgili tüm görüşmeler bitti ve müşteri tarafından istenecek bir görüşme görelim.

İstemci Tarafı Soket Çağrıları

Connect () çağrısı

Müşteri programı hazırlayacaksanız, önce kullanacaksınız socket() bir soket oluşturmak için çağırın ve sonra kullanmanız gerekir connect()sunucuya bağlanmak için arayın. Soket () çağrısı sözdizimini zaten gördünüz ve sunucu socket () çağrısına benzer kalacaktır, ancak burada sözdizimiconnect() ara -

connect( SOCKET, ADDRESS );

Burada SCOKET, istemci tarafından yayınlanan soket () çağrısı tarafından döndürülen soket tanımlayıcısıdır ve ADDRESS, uzak sunucunun IP adresini içermesi dışında, bağlama çağrısına benzer bir soket adresidir .

$port = 21;    # For example, the ftp port
$server_ip_address = "10.12.12.168"; connect( SOCKET, pack_sockaddr_in($port, inet_aton($server_ip_address))) or die "Can't connect to port $port! \n";

Sunucuya başarılı bir şekilde bağlanırsanız, SOCKET tanımlayıcısını kullanarak komutlarınızı sunucuya göndermeye başlayabilirsiniz, aksi takdirde istemciniz hata mesajı vererek çıkacaktır.

İstemci - Sunucu Örneği

Aşağıda, Perl soketini kullanarak basit bir istemci-sunucu programını uygulamak için bir Perl kodu verilmiştir. Burada sunucu gelen istekleri dinler ve bağlantı kurulduktan sonra, sadece Smile'ı sunucudan yanıtlar . Müşteri bu mesajı okur ve ekrana yazdırır. Sunucumuz ve istemcimizin aynı makinede olduğunu varsayarsak, nasıl yapıldığını görelim.

Sunucu Oluşturma Komut Dosyası

#!/usr/bin/perl -w
# Filename : server.pl

use strict;
use Socket;

# use port 7890 as default
my $port = shift || 7890; my $proto = getprotobyname('tcp');
my $server = "localhost"; # Host IP running the server # create a socket, make it reusable socket(SOCKET, PF_INET, SOCK_STREAM, $proto)
   or die "Can't open socket $!\n"; setsockopt(SOCKET, SOL_SOCKET, SO_REUSEADDR, 1) or die "Can't set socket option to SO_REUSEADDR $!\n";

# bind to a port, then listen
bind( SOCKET, pack_sockaddr_in($port, inet_aton($server)))
   or die "Can't bind to port $port! \n"; listen(SOCKET, 5) or die "listen: $!";
print "SERVER started on port $port\n"; # accepting a connection my $client_addr;
while ($client_addr = accept(NEW_SOCKET, SOCKET)) { # send them a message, close connection my $name = gethostbyaddr($client_addr, AF_INET ); print NEW_SOCKET "Smile from the server"; print "Connection recieved from $name\n";
   close NEW_SOCKET;
}

Sunucuyu arka plan modunda çalıştırmak için Unix isteminde aşağıdaki komutu verin -

$perl sever.pl&

İstemci Oluşturma Komut Dosyası

!/usr/bin/perl -w
# Filename : client.pl

use strict;
use Socket;

# initialize host and port
my $host = shift || 'localhost';
my $port = shift || 7890; my $server = "localhost";  # Host IP running the server

# create the socket, connect to the port
socket(SOCKET,PF_INET,SOCK_STREAM,(getprotobyname('tcp'))[2])
   or die "Can't create a socket $!\n"; connect( SOCKET, pack_sockaddr_in($port, inet_aton($server))) or die "Can't connect to port $port! \n";

my $line; while ($line = <SOCKET>) {
   print "$line\n"; } close SOCKET or die "close: $!";

Şimdi sunucumuza bağlanacak ve sunucu tarafından gönderilen mesajı okuyacak ve ekranda aşağıdaki gibi görünen komut isteminde istemcimizi başlatalım -

$perl client.pl
Smile from the server

NOTE - Gerçek IP adresini noktalı gösterimle veriyorsanız, karışıklığı önlemek için hem istemcide hem de sunucuda aynı formatta IP adresi sağlamanız önerilir.

Perl ve Perl anonim dizileri ve karmalarındaki referansları zaten inceledik. Perl'deki Nesne Yönelimli kavram, büyük ölçüde referanslara ve anonim dizilere ve karmalara dayanır. Nesneye Yönelik Perl'in temel kavramlarını öğrenmeye başlayalım.

Nesne Temelleri

Perl'in nesneleri nasıl işlediği açısından açıklanan üç ana terim vardır. Terimler nesne, sınıf ve yöntemdir.

  • Bir objectPerl içinde yalnızca, hangi sınıfa ait olduğunu bilen bir veri türüne referanstır. Nesne, skaler bir değişkende referans olarak saklanır. Bir skaler yalnızca nesneye bir başvuru içerdiğinden, aynı skaler farklı sınıflarda farklı nesneleri tutabilir.

  • Bir class Perl içinde, nesneleri oluşturmak ve işlemek için gereken ilgili yöntemleri içeren bir pakettir.

  • Bir methodPerl içinde paketle tanımlanan bir alt yordamdır. Yöntemin ilk argümanı, yöntemin geçerli nesneyi veya sınıfı etkilemesine bağlı olarak bir nesne başvurusu veya paket adıdır.

Perl, bir bless() Sonuçta bir nesne haline gelen bir başvuru döndürmek için kullanılan işlev.

Sınıf Tanımlama

Perl'de bir sınıf tanımlamak çok basit. Bir sınıf, en basit haliyle Perl Paketine karşılık gelir. Perl'de bir sınıf oluşturmak için önce bir paket oluşturuyoruz.

Bir paket, tekrar tekrar kullanılabilen, kullanıcı tanımlı değişkenler ve alt rutinlerden oluşan bağımsız bir birimdir.

Perl Paketleri, bir Perl programı içinde alt yordamları ve değişkenleri diğer paketlerdekilerle çakışmaktan bağımsız tutan ayrı bir ad alanı sağlar.

Perl'de Kişi adlı bir sınıfı bildirmek için -

package Person;

Paket tanımının kapsamı dosyanın sonuna veya başka bir paket anahtar sözcüğüyle karşılaşılana kadar uzanır.

Nesne Oluşturma ve Kullanma

Bir sınıfın bir örneğini (bir nesne) oluşturmak için bir nesne yapıcısına ihtiyacımız var. Bu kurucu, paket içinde tanımlanan bir yöntemdir. Çoğu programcı, bu nesne yapıcı yöntemini yeni olarak adlandırmayı seçer, ancak Perl'de herhangi bir adı kullanabilirsiniz.

Perl'de herhangi bir Perl değişkenini bir nesne olarak kullanabilirsiniz. Çoğu Perl programcısı, dizilere veya karmalara başvuruları seçer.

Perl hash referansı kullanarak Person sınıfımız için kurucumuzu oluşturalım. Bir nesne oluştururken, bir pakette nesne referansı döndüren bir alt yordam olan bir kurucu sağlamanız gerekir. Nesne başvurusu, paketin sınıfına bir başvuru kutsayarak oluşturulur. Örneğin -

package Person;
sub new {
   my $class = shift;
   my $self = { _firstName => shift, _lastName => shift, _ssn => shift, }; # Print all the values just for clarification. print "First Name is $self->{_firstName}\n";
   print "Last Name is $self->{_lastName}\n"; print "SSN is $self->{_ssn}\n";
   bless $self, $class;
   return $self;
}

Şimdi nasıl bir Object oluşturacağımızı görelim.

$object = new Person( "Mohammad", "Saleem", 23234345);

Herhangi bir sınıf değişkenine herhangi bir değer atamak istemiyorsanız, oluşturucunuzda basit karma kullanabilirsiniz. Örneğin -

package Person;
sub new {
   my $class = shift; my $self = {};
   bless $self, $class;
   return $self;
}

Yöntemleri Tanımlama

Diğer nesne yönelimli diller, bir programcının bir nesne verilerini doğrudan değiştirmesini önlemek için veri güvenliği konseptine sahiptir ve bunlar, nesne verilerini değiştirmek için erişim yöntemleri sağlar. Perl'de özel değişkenler yoktur, ancak yine de nesne verilerini işlemek için yardımcı yöntemler kavramını kullanabiliriz.

Kişinin adını almak için bir yardımcı yöntem tanımlayalım -

sub getFirstName {
   return $self->{_firstName};
}

Kişinin adını belirlemek için başka bir yardımcı işlev -

sub setFirstName {
   my ( $self, $firstName ) = @_;
   $self->{_firstName} = $firstName if defined($firstName); return $self->{_firstName};
}

Şimdi eksiksiz bir örneğe bakalım: Kişi paketini ve yardımcı işlevleri Person.pm dosyasında saklayın.

#!/usr/bin/perl 

package Person;

sub new {
   my $class = shift; my $self = {
      _firstName => shift,
      _lastName  => shift,
      _ssn       => shift,
   };
   # Print all the values just for clarification.
   print "First Name is $self->{_firstName}\n"; print "Last Name is $self->{_lastName}\n";
   print "SSN is $self->{_ssn}\n"; bless $self, $class; return $self;
}
sub setFirstName {
   my ( $self, $firstName ) = @_;
   $self->{_firstName} = $firstName if defined($firstName); return $self->{_firstName};
}

sub getFirstName {
   my( $self ) = @_; return $self->{_firstName};
}
1;

Şimdi Employee.pl dosyasındaki Person nesnesini aşağıdaki gibi kullanalım -

#!/usr/bin/perl

use Person;

$object = new Person( "Mohammad", "Saleem", 23234345); # Get first name which is set using constructor. $firstName = $object->getFirstName(); print "Before Setting First Name is : $firstName\n";

# Now Set first name using helper function.
$object->setFirstName( "Mohd." ); # Now get first name set by helper function. $firstName = $object->getFirstName(); print "Before Setting First Name is : $firstName\n";

Yukarıdaki programı çalıştırdığımızda, aşağıdaki sonucu verir -

First Name is Mohammad
Last Name is Saleem
SSN is 23234345
Before Setting First Name is : Mohammad
Before Setting First Name is : Mohd.

Miras

Nesne yönelimli programlama, miras adı verilen çok iyi ve kullanışlı bir konsepte sahiptir. Kalıtım, bir üst sınıfın özelliklerinin ve yöntemlerinin alt sınıflar tarafından kullanılabilir olacağı anlamına gelir. Böylece aynı kodu tekrar tekrar yazmak zorunda değilsiniz, sadece bir ebeveyn sınıfı miras alabilirsiniz.

Örneğin, Person'dan miras kalan bir Çalışan sınıfımız olabilir. Çalışan bir kişi olduğu için buna "isa" ilişkisi denir. Perl'in bu konuda yardımcı olması için @ISA adlı özel bir değişkeni vardır. @ISA kalıtımı yönetir (yöntem).

Miras kullanılırken dikkat edilmesi gereken önemli noktalar şunlardır:

  • Perl, verilen yöntem veya öznitelik, yani değişken için belirtilen nesnenin sınıfını arar.

  • Perl, nesne sınıfının @ISA dizisinde tanımlanan sınıfları arar.

  • Adım 1 veya 2'de hiçbir yöntem bulunmazsa, @ISA ağacında bulunursa Perl bir AUTOLOAD alt yordamı kullanır.

  • Eşleşen bir yöntem hala bulunamazsa, Perl yöntemi, standart Perl kitaplığının bir parçası olarak gelen UNIVERSAL sınıfı (paket) içinde arar.

  • Yöntem hala bulunamazsa, Perl pes eder ve bir çalışma zamanı istisnası oluşturur.

Dolayısıyla, Person sınıfımızdan yöntemleri ve öznitelikleri devralacak yeni bir Employee sınıfı oluşturmak için, aşağıdaki gibi kodlama yapıyoruz: Bu kodu Employee.pm'de saklayın.

#!/usr/bin/perl

package Employee;
use Person;
use strict;
our @ISA = qw(Person);    # inherits from Person

Artık Çalışan Sınıfı, Person sınıfından miras alınan tüm yöntemlere ve özniteliklere sahiptir ve bunları aşağıdaki gibi kullanabilirsiniz: Test etmek için main.pl dosyasını kullanın -

#!/usr/bin/perl

use Employee;

$object = new Employee( "Mohammad", "Saleem", 23234345); # Get first name which is set using constructor. $firstName = $object->getFirstName(); print "Before Setting First Name is : $firstName\n";

# Now Set first name using helper function.
$object->setFirstName( "Mohd." ); # Now get first name set by helper function. $firstName = $object->getFirstName(); print "After Setting First Name is : $firstName\n";

Yukarıdaki programı çalıştırdığımızda, aşağıdaki sonucu verir -

First Name is Mohammad
Last Name is Saleem
SSN is 23234345
Before Setting First Name is : Mohammad
Before Setting First Name is : Mohd.

Yöntemi Geçersiz Kılma

Çalışan çocuk sınıfı, Person üst sınıfından tüm yöntemleri devralır. Ancak, çocuk sınıfınızda bu yöntemleri geçersiz kılmak istiyorsanız, bunu kendi uygulamanızı vererek yapabilirsiniz. Ek işlevlerinizi alt sınıfta ekleyebilir veya üst sınıfında var olan bir yöntemin işlevselliğini ekleyebilir veya değiştirebilirsiniz. Aşağıdaki gibi yapılabilir: Employee.pm dosyasını değiştirin.

#!/usr/bin/perl

package Employee;
use Person;
use strict;
our @ISA = qw(Person);    # inherits from Person

# Override constructor
sub new {
   my ($class) = @_; # Call the constructor of the parent class, Person. my $self = $class->SUPER::new( $_[1], $_[2], $_[3] );
   # Add few more attributes
   $self->{_id} = undef; $self->{_title} = undef;
   bless $self, $class;
   return $self; } # Override helper function sub getFirstName { my( $self ) = @_;
   # This is child class function.
   print "This is child class helper function\n";
   return $self->{_firstName}; } # Add more methods sub setLastName{ my ( $self, $lastName ) = @_; $self->{_lastName} = $lastName if defined($lastName);
   return $self->{_lastName}; } sub getLastName { my( $self ) = @_;
   return $self->{_lastName};
}

1;

Şimdi yine main.pl dosyamızda Employee nesnesini kullanmayı deneyelim ve çalıştıralım.

#!/usr/bin/perl

use Employee;

$object = new Employee( "Mohammad", "Saleem", 23234345);
# Get first name which is set using constructor.
$firstName = $object->getFirstName();

print "Before Setting First Name is : $firstName\n"; # Now Set first name using helper function. $object->setFirstName( "Mohd." );

# Now get first name set by helper function.
$firstName = $object->getFirstName();
print "After Setting First Name is : $firstName\n";

Yukarıdaki programı çalıştırdığımızda, aşağıdaki sonucu verir -

First Name is Mohammad
Last Name is Saleem
SSN is 23234345
This is child class helper function
Before Setting First Name is : Mohammad
This is child class helper function
After Setting First Name is : Mohd.

Varsayılan Otomatik Yükleme

Perl, diğer programlama dillerinde bulamayacağınız bir özellik sunar: varsayılan bir alt program. Bu, adı verilen bir işlevi tanımlarsanız,AUTOLOAD(),daha sonra tanımlanmamış alt programlara yapılan herhangi bir çağrı AUTOLOAD () işlevini otomatik olarak çağıracaktır. Eksik alt yordamın adına bu alt yordam içinde $ AUTOLOAD olarak erişilebilir.

Varsayılan otomatik yükleme işlevi, hata işleme için çok kullanışlıdır. İşte AUTOLOAD'ı uygulamak için bir örnek, bu işlevi kendi yönteminizle uygulayabilirsiniz.

sub AUTOLOAD {
   my $self = shift; my $type = ref ($self) || croak "$self is not an object";
   my $field = $AUTOLOAD;
   $field =~ s/.*://; unless (exists $self->{$field}) { croak "$field does not exist in object/class $type"; } if (@_) { return $self->($name) = shift; } else { return $self->($name);
   }
}

Yıkıcılar ve Çöp Toplama

Daha önce nesne yönelimli programlama kullanarak programladıysanız, bir program oluşturma ihtiyacının farkında olacaksınız. destructornesneyi kullanmayı bitirdiğinizde, nesneye ayrılan belleği boşaltmak için. Perl, nesne kapsam dışına çıkar çıkmaz bunu sizin için otomatik olarak yapar.

İmha edicinizi uygulamak istiyorsanız, ki bu da dosyaları kapatmakla veya fazladan bazı işlemler yapmakla ilgilenmelidir, o zaman özel bir yöntem tanımlamanız gerekir. DESTROY. Bu yöntem, Perl kendisine ayrılan belleği serbest bırakmadan hemen önce nesneye çağrılacaktır. Diğer tüm açılardan, DESTROY yöntemi tıpkı diğer yöntemler gibidir ve bu yöntem içinde istediğiniz mantığı uygulayabilirsiniz.

Bir yıkıcı yöntemi, aşağıdaki durumlarda otomatik olarak çağrılacak olan DESTROY adlı bir üye işlevdir (alt yordam) -

  • Nesne referansının değişkeni kapsam dışına çıktığında.
  • Nesne başvurusunun değişkeni tanımsız olduğunda.
  • Komut dosyası bittiğinde
  • Perl yorumlayıcısı sona erdiğinde

Örneğin, aşağıdaki DESTROY yöntemini sınıfınıza koyabilirsiniz -

package MyClass;
...
sub DESTROY {
   print "MyClass::DESTROY called\n";
}

Nesne Tabanlı Perl Örneği

İşte Perl'in Nesneye Dayalı Kavramlarını anlamanıza yardımcı olacak bir başka güzel örnek. Bu kaynak kodunu herhangi bir perl dosyasına koyun ve çalıştırın.

#!/usr/bin/perl

# Following is the implementation of simple Class.
package MyClass;

sub new {
   print "MyClass::new called\n";
   my $type = shift;            # The package/type name
   my $self = {}; # Reference to empty hash return bless $self, $type; } sub DESTROY { print "MyClass::DESTROY called\n"; } sub MyMethod { print "MyClass::MyMethod called!\n"; } # Following is the implemnetation of Inheritance. package MySubClass; @ISA = qw( MyClass ); sub new { print "MySubClass::new called\n"; my $type = shift;            # The package/type name
   my $self = MyClass->new; # Reference to empty hash return bless $self, $type; } sub DESTROY { print "MySubClass::DESTROY called\n"; } sub MyMethod { my $self = shift;
   $self->SUPER::MyMethod(); print " MySubClass::MyMethod called!\n"; } # Here is the main program using above classes. package main; print "Invoke MyClass method\n"; $myObject = MyClass->new();
$myObject->MyMethod(); print "Invoke MySubClass method\n"; $myObject2 = MySubClass->new();
$myObject2->MyMethod(); print "Create a scoped object\n"; { my $myObject2 = MyClass->new();
}
# Destructor is called automatically here

print "Create and undef an object\n";
$myObject3 = MyClass->new(); undef $myObject3;

print "Fall off the end of the script...\n";
# Remaining destructors are called automatically here

Yukarıdaki programı çalıştırdığımızda, aşağıdaki sonucu verir -

Invoke MyClass method
MyClass::new called
MyClass::MyMethod called!
Invoke MySubClass method
MySubClass::new called
MyClass::new called
MyClass::MyMethod called!
MySubClass::MyMethod called!
Create a scoped object
MyClass::new called
MyClass::DESTROY called
Create and undef an object
MyClass::new called
MyClass::DESTROY called
Fall off the end of the script...
MyClass::DESTROY called
MySubClass::DESTROY called

Bu bölüm size Perl betiğiniz içindeki bir veritabanına nasıl erişeceğinizi öğretir. Perl 5'ten başlayarak veritabanı uygulamaları yazmak çok kolay hale geldi.DBImodül. DBI,Database Independent Interface Perl için, yani DBI, Perl kodu ve temeldeki veritabanı arasında bir soyutlama katmanı sağlar ve veritabanı uygulamalarını gerçekten kolayca değiştirmenize olanak tanır.

DBI, Perl programlama dili için bir veritabanı erişim modülüdür. Kullanılan gerçek veritabanından bağımsız olarak tutarlı bir veritabanı arabirimi sağlayan bir dizi yöntem, değişken ve kural sağlar.

DBI Uygulamasının Mimarisi

DBI, arka uçta bulunan herhangi bir veritabanından bağımsızdır. Oracle, MySQL veya Informix, vb. İle çalışıyor olsanız da DBI kullanabilirsiniz. Bu, aşağıdaki arşiv diyagramından anlaşılır.

Burada DBI, tüm SQL komutlarını API (yani Uygulama Programlama Arayüzü) aracılığıyla almaktan ve bunları gerçek yürütme için uygun sürücüye göndermekten sorumludur. Ve son olarak, DBI sürücüden sonuçları almaktan ve arayan scritp'e geri vermekten sorumludur.

Gösterim ve Kurallar

Bu bölüm boyunca aşağıdaki gösterimler kullanılacaktır ve aynı kurala uymanız da tavsiye edilir.

$dsn Database source name $dbh    Database handle object
$sth Statement handle object $h      Any of the handle types above ($dbh, $sth, or $drh) $rc     General Return Code  (boolean: true=ok, false=error)
$rv General Return Value (typically an integer) @ary List of values returned from the database. $rows   Number of rows processed (if available, else -1)
$fh     A filehandle
undef   NULL values are represented by undefined values in Perl
\%attr  Reference to a hash of attribute values passed to methods

Veritabanı Bağlantısı

MySQL veritabanıyla çalışacağımızı varsayalım. Bir veritabanına bağlanmadan önce aşağıdakilerden emin olun. MySQL veritabanında veritabanı ve tabloların nasıl oluşturulacağını bilmiyorsanız, MySQL eğitimimizden yardım alabilirsiniz.

  • TESTDB adıyla bir veritabanı oluşturdunuz.

  • TESTDB'de TEST_TABLE adıyla bir tablo oluşturdunuz.

  • Bu tablo FIRST_NAME, LAST_NAME, AGE, SEX ve INCOME alanlarına sahip.

  • "Testuser" kullanıcı kimliği ve "test123" şifresi TESTDB'ye erişmek için ayarlanmıştır.

  • Perl Module DBI, makinenize doğru bir şekilde kurulmuştur.

  • MySQL Temellerini anlamak için MySQL eğitiminden geçtiniz.

Aşağıda MySQL veritabanı "TESTDB" ile bağlantı kurma örneği verilmiştir -

#!/usr/bin/perl

use DBI
use strict;

my $driver = "mysql"; 
my $database = "TESTDB"; my $dsn = "DBI:$driver:database=$database";
my $userid = "testuser"; my $password = "test123";

my $dbh = DBI->connect($dsn, $userid, $password ) or die $DBI::errstr;

Veri kaynağıyla bir bağlantı kurulursa, bir Veritabanı Tutamacı döndürülür ve daha sonra kullanılmak üzere $ dbh'ye kaydedilir, aksi takdirde $ dbh, undef değerine ayarlanır ve $ DBI :: errstr bir hata dizesi döndürür.

INSERT İşlemi

Bir tabloya bazı kayıtlar oluşturmak istediğinizde INSERT işlemi gereklidir. Burada kayıtlarımızı oluşturmak için TEST_TABLE tablosunu kullanıyoruz. Dolayısıyla, veritabanı bağlantımız bir kez kurulduktan sonra, TEST_TABLE'a kayıtlar oluşturmaya hazırız. TEST_TABLE'a tek kayıt oluşturma prosedürü aşağıdadır. Aynı konsepti kullanarak istediğiniz kadar kayıt oluşturabilirsiniz.

Kayıt oluşturma aşağıdaki adımları gerçekleştirir -

  • INSERT deyimiyle SQL deyiminin hazırlanması. Bu kullanılarak yapılacaktırprepare() API.

  • Veritabanından tüm sonuçları seçmek için SQL sorgusunun yürütülmesi. Bu kullanılarak yapılacaktırexecute() API.

  • Stattement tutamacı serbest bırakılıyor. Bu kullanılarak yapılacaktırfinish() API.

  • Her şey yolunda giderse o zaman commit bu işlem yoksa yapabilirsin rollbackişlemi tamamla. Kaydetme ve Geri Alma sonraki bölümlerde açıklanmaktadır.

my $sth = $dbh->prepare("INSERT INTO TEST_TABLE
                       (FIRST_NAME, LAST_NAME, SEX, AGE, INCOME )
                         values
                       ('john', 'poul', 'M', 30, 13000)");
$sth->execute() or die $DBI::errstr;
$sth->finish(); $dbh->commit or die $DBI::errstr;

Bağlama Değerlerini Kullanma

Girilecek değerlerin önceden verilmediği bir durum olabilir. Böylece, çalışma zamanında gerekli değerleri alacak olan bağlama değişkenlerini kullanabilirsiniz. Perl DBI modülleri, gerçek değerin yerine bir soru işareti kullanır ve daha sonra gerçek değerler, çalışma zamanında execute () API'sinden geçirilir. Örnek aşağıdadır -

my $first_name = "john";
my $last_name = "poul"; my $sex = "M";
my $income = 13000; my $age = 30;
my $sth = $dbh->prepare("INSERT INTO TEST_TABLE
                        (FIRST_NAME, LAST_NAME, SEX, AGE, INCOME )
                          values
                        (?,?,?,?)");
$sth->execute($first_name,$last_name,$sex, $age, $income) 
          or die $DBI::errstr; $sth->finish();
$dbh->commit or die $DBI::errstr;

OKUMA İşlemi

Herhangi bir veri yolu üzerinde OKU işlemi, veri tabanından bazı yararlı bilgileri, yani bir veya daha fazla tablodan bir veya daha fazla kaydı almak anlamına gelir. Dolayısıyla, veritabanı bağlantımız kurulduktan sonra, bu veritabanına bir sorgu yapmaya hazırız. Aşağıda, 20'den büyük AGE'ye sahip tüm kayıtları sorgulama prosedürü açıklanmaktadır. Bu dört adım sürecektir -

  • SQL SELECT sorgusunu gerekli koşullara göre hazırlamak. Bu kullanılarak yapılacaktırprepare() API.

  • Veritabanından tüm sonuçları seçmek için SQL sorgusunun yürütülmesi. Bu kullanılarak yapılacaktırexecute() API.

  • Tüm sonuçları tek tek almak ve bu sonuçları yazdırmak. fetchrow_array() API.

  • Stattement tutamacı serbest bırakılıyor. Bu kullanılarak yapılacaktırfinish() API.

my $sth = $dbh->prepare("SELECT FIRST_NAME, LAST_NAME
                        FROM TEST_TABLE 
                        WHERE AGE > 20");
$sth->execute() or die $DBI::errstr;
print "Number of rows found :" + $sth->rows; while (my @row = $sth->fetchrow_array()) {
   my ($first_name, $last_name ) = @row;
   print "First Name = $first_name, Last Name = $last_name\n";
}
$sth->finish();

Bağlama Değerlerini Kullanma

Önceden koşul verilmediği bir durum olabilir. Böylece, çalışma zamanında gerekli değerleri alacak olan bağlama değişkenlerini kullanabilirsiniz. Perl DBI modülleri, gerçek değerin yerine bir soru işareti kullanır ve daha sonra gerçek değerler, çalışma zamanında execute () API'sinden geçirilir. Örnek aşağıdadır -

$age = 20;
my $sth = $dbh->prepare("SELECT FIRST_NAME, LAST_NAME
                        FROM TEST_TABLE
                        WHERE AGE > ?");
$sth->execute( $age ) or die $DBI::errstr; print "Number of rows found :" + $sth->rows;
while (my @row = $sth->fetchrow_array()) { my ($first_name, $last_name ) = @row; print "First Name = $first_name, Last Name = $last_name\n"; } $sth->finish();

GÜNCELLEME İşlemi

GÜNCELLEME Herhangi bir veritabanı üzerinde işlem, veritabanı tablolarında zaten mevcut olan bir veya daha fazla kaydı güncellemek anlamına gelir. Aşağıda, SEX olan tüm kayıtları 'M' olarak güncelleme prosedürü yer almaktadır. Burada tüm erkeklerin YAŞ'ını bir yıl artıracağız. Bu üç adım atacak -

  • Gerekli koşullara göre SQL sorgusu hazırlamak. Bu kullanılarak yapılacaktırprepare() API.

  • Veritabanından tüm sonuçları seçmek için SQL sorgusunun yürütülmesi. Bu kullanılarak yapılacaktırexecute() API.

  • Stattement tutamacı serbest bırakılıyor. Bu kullanılarak yapılacaktırfinish() API.

  • Her şey yolunda giderse o zaman commit bu işlem yoksa yapabilirsin rollbackişlemi tamamla. Kaydetme ve geri alma API'leri için sonraki bölüme bakın.

my $sth = $dbh->prepare("UPDATE TEST_TABLE
                        SET   AGE = AGE + 1 
                        WHERE SEX = 'M'");
$sth->execute() or die $DBI::errstr;
print "Number of rows updated :" + $sth->rows; $sth->finish();
$dbh->commit or die $DBI::errstr;

Bağlama Değerlerini Kullanma

Önceden koşul verilmediği bir durum olabilir. Böylece, çalışma zamanında gerekli değerleri alacak olan bağlama değişkenlerini kullanabilirsiniz. Perl DBI modülleri, gerçek değer yerine bir soru işaretini kullanır ve daha sonra gerçek değerler, çalışma zamanında execute () API üzerinden geçirilir. Örnek aşağıdadır -

$sex = 'M'; my $sth = $dbh->prepare("UPDATE TEST_TABLE SET AGE = AGE + 1 WHERE SEX = ?"); $sth->execute('$sex') or die $DBI::errstr;
print "Number of rows updated :" + $sth->rows; $sth->finish();
$dbh->commit or die $DBI::errstr;

Bazı durumlarda, önceden verilmeyen bir değer ayarlamak isteyebilirsiniz, böylece aşağıdaki gibi bağlama değerini kullanabilirsiniz. Bu örnekte tüm erkeklerin geliri 10000 olarak ayarlanacaktır.

$sex = 'M'; $income = 10000;
my $sth = $dbh->prepare("UPDATE TEST_TABLE
                        SET   INCOME = ?
                        WHERE SEX = ?");
$sth->execute( $income, '$sex') or die $DBI::errstr;
print "Number of rows updated :" + $sth->rows; $sth->finish();

DELETE İşlemi

Veritabanınızdan bazı kayıtları silmek istediğinizde DELETE işlemi gereklidir. Aşağıda, AGE'nin 30'a eşit olduğu TEST_TABLE'dan tüm kayıtları silme prosedürü açıklanmaktadır. Bu işlem aşağıdaki adımları alacaktır.

  • Gerekli koşullara göre SQL sorgusu hazırlamak. Bu kullanılarak yapılacaktırprepare() API.

  • Veritabanından gerekli kayıtları silmek için SQL sorgusunun yürütülmesi. Bu kullanılarak yapılacaktırexecute() API.

  • Stattement tutamacı serbest bırakılıyor. Bu kullanılarak yapılacaktırfinish() API.

  • Her şey yolunda giderse o zaman commit bu işlem yoksa yapabilirsin rollback işlemi tamamla.

$age = 30; my $sth = $dbh->prepare("DELETE FROM TEST_TABLE WHERE AGE = ?"); $sth->execute( $age ) or die $DBI::errstr;
print "Number of rows deleted :" + $sth->rows; $sth->finish();
$dbh->commit or die $DBI::errstr;

Do İfadesini Kullanma

GÜNCELLEME, INSERT veya DELETE yapıyorsanız, veritabanından geri gelen veri yoktur, bu nedenle bu işlemi gerçekleştirmek için kısa bir yol vardır. Kullanabilirsinizdo komutlardan herhangi birini aşağıdaki gibi çalıştırmak için ifade.

$dbh->do('DELETE FROM TEST_TABLE WHERE age =30');

dobaşarılı olursa gerçek bir değer, başarısız olursa yanlış bir değer döndürür. Aslında başarılı olursa, etkilenen satırların sayısını döndürür. Örnekte, gerçekten silinen satırların sayısını döndürür.

COMMIT İşlemi

Commit, değişiklikleri sonlandırmak için veri tabanına yeşil sinyal veren ve bu işlemden sonra hiçbir değişiklik orijinal konumuna geri döndürülemeyen işlemdir.

İşte aramak için basit bir örnek commit API.

$dbh->commit or die $dbh->errstr;

GERİ DÖNME İşlemi

Tüm değişikliklerden memnun kalmazsanız veya herhangi bir işlem arasında bir hatayla karşılaşırsanız, bu değişiklikleri kullanmak üzere geri döndürebilirsiniz. rollback API.

İşte aramak için basit bir örnek rollback API.

$dbh->rollback or die $dbh->errstr;

İşlemi Başlatın

Birçok veritabanı işlemleri destekler. Bu, veritabanlarını değiştirecek bir sürü sorgu yapabileceğiniz, ancak değişikliklerin hiçbirinin gerçekten yapılmadığı anlamına gelir. Ardından, özel SQL sorgusunu yayınlarsınız.COMMITve tüm değişiklikler aynı anda yapılır. Alternatif olarak, ROLLBACK sorgusunu yayınlayabilirsiniz, bu durumda tüm değişiklikler atılır ve veritabanı değişmeden kalır.

Perl DBI modülü sağlandı begin_workAPI, işlemlere (AutoCommit'i kapatarak) bir sonraki commit veya geri alma çağrısına kadar izin verir. Bir sonraki kaydetme veya geri alma işleminden sonra, AutoCommit otomatik olarak yeniden açılacaktır.

$rc  = $dbh->begin_work or die $dbh->errstr;

Otomatik Komite Seçeneği

İşlemleriniz basitse, kendinizi çok fazla taahhütte bulunma zahmetinden kurtarabilirsiniz. Bağlantı çağrısı yaptığınızda, birAutoCommitHer başarılı sorgudan sonra otomatik bir kesinleştirme işlemi gerçekleştirecek seçenek. İşte göründüğü gibi -

my $dbh = DBI->connect($dsn, $userid, $password,
              {AutoCommit => 1}) 
              or die $DBI::errstr;

Burada AutoCommit, 1 veya 0 değerini alabilir; burada 1, AutoCommit'in açık olduğu ve 0, AutoCommit'in kapalı olduğu anlamına gelir.

Otomatik Hata İşleme

Connect çağrısı yaptığınızda, hataları sizin için otomatik olarak işleyen bir RaiseErrors seçeneği belirtebilirsiniz. Bir hata oluştuğunda, DBI bir hata kodu döndürmek yerine programınızı durdurur. Tek istediğiniz programı bir hata nedeniyle iptal etmekse, bu uygun olabilir. İşte göründüğü gibi -

my $dbh = DBI->connect($dsn, $userid, $password, {RaiseError => 1}) or die $DBI::errstr;

Burada RaiseError 1 veya 0 değerini alabilir.

Veritabanının Bağlantısını Kesme

Veritabanı bağlantısını kesmek için şunu kullanın: disconnect API aşağıdaki gibidir -

$rc = $dbh->disconnect  or warn $dbh->errstr;

Bağlantı kesme yönteminin işlem davranışı ne yazık ki tanımsızdır. Bazı veritabanı sistemleri (Oracle ve Ingres gibi) tüm olağanüstü değişiklikleri otomatik olarak gerçekleştirecek, ancak diğerleri (Informix gibi) olağanüstü değişiklikleri geri alacaktır. AutoCommit kullanmayan uygulamalar, bağlantı kesme çağrısı yapmadan önce açıkça commit veya geri alma çağrısı yapmalıdır.

NULL Değerleri Kullanma

Tanımlanmamış değerler veya undef, NULL değerleri belirtmek için kullanılır. NULL olmayan bir değerde yaptığınız gibi NULL değerli sütunlar ekleyebilir ve güncelleyebilirsiniz. Bu örnekler sütun yaşını NULL değerle ekler ve günceller -

$sth = $dbh->prepare(qq { INSERT INTO TEST_TABLE (FIRST_NAME, AGE) VALUES (?, ?) }); $sth->execute("Joe", undef);

Buraya qq{} tırnak içine alınmış bir dizeyi döndürmek için kullanılır prepareAPI. Ancak, bir WHERE yan tümcesinde NULL değerleri kullanmaya çalışırken dikkatli olunmalıdır. Düşünün -

SELECT FIRST_NAME FROM TEST_TABLE WHERE age = ?

Yer tutucuya bir undef (NULL) bağlamak, NULL yaşı olan satırları seçmez! En azından SQL standardına uyan veritabanı motorları için. Bunun nedenleri için veritabanı motorunuzun SQL kılavuzuna veya herhangi bir SQL kitabına bakın. NULL'leri açıkça seçmek için "WHERE age IS NULL" demeniz gerekir.

Yaygın bir sorun, bir kod parçasının çalışma zamanında tanımlanmış veya tanımlanmamış (NULL olmayan veya NULL) olabilen bir değeri işlemesidir. Basit bir teknik, gerektiği gibi uygun ifadeyi hazırlamak ve NULL olmayan durumlar için yer tutucuyu değiştirmektir -

$sql_clause = defined $age? "age = ?" : "age IS NULL";
$sth = $dbh->prepare(qq {
         SELECT FIRST_NAME FROM TEST_TABLE WHERE $sql_clause }); $sth->execute(defined $age ? $age : ());

Diğer Bazı DBI İşlevleri

available_drivers

@ary = DBI->available_drivers;
@ary = DBI->available_drivers($quiet);

@INC içindeki dizinlerde DBD :: * modüllerini arayarak tüm mevcut sürücülerin bir listesini döndürür. Varsayılan olarak, bazı sürücüler önceki dizinlerde aynı ada sahip başkaları tarafından gizlenmişse bir uyarı verilir. $ Quiet için gerçek bir değerin iletilmesi uyarıyı engelleyecektir.

install_drivers

%drivers = DBI->installed_drivers();

Geçerli işleme 'yüklenen' (yüklenen) tüm sürücüler için sürücü adı ve sürücü tanıtıcısı çiftlerinin bir listesini döndürür. Sürücü adı 'DBD ::' önekini içermez.

veri kaynakları

@ary = DBI->data_sources($driver);

Adlandırılmış sürücü aracılığıyla kullanılabilen veri kaynaklarının (veritabanları) listesini döndürür. $ Driver boşsa veya undef ise, DBI_DRIVER ortam değişkeninin değeri kullanılır.

alıntı

$sql = $dbh->quote($value); $sql = $dbh->quote($value, $data_type);

Dize içinde yer alan özel karakterlerden (tırnak işaretleri gibi) kaçınarak ve gerekli dış tırnak işaretlerini ekleyerek, bir SQL deyiminde değişmez değer olarak kullanmak için bir dize değişmezi alıntılayın.

$sql = sprintf "SELECT foo FROM bar WHERE baz = %s",
                $dbh->quote("Don't");

Çoğu veritabanı türü için, tırnak 'Yapma' (dış tırnak işaretleri dahil) döndürür. Alıntı () yönteminin istenen dizge olarak değerlendirilen bir SQL ifadesi döndürmesi için geçerlidir. Örneğin -

$quoted = $dbh->quote("one\ntwo\0three")

may produce results which will be equivalent to

CONCAT('one', CHAR(12), 'two', CHAR(0), 'three')

Tüm Kollarda Ortak Olan Yöntemler

hata

$rv = $h->err; or $rv = $DBI::err or $rv = $h->err

Çağrılan son sürücü yönteminden yerel veritabanı motoru hata kodunu döndürür. Kod tipik olarak bir tamsayıdır, ancak bunu varsaymamalısınız. Bu, $ DBI :: err veya $ h-> err ile eşdeğerdir.

hatastr

$str = $h->errstr; or $str = $DBI::errstr or $str = $h->errstr

Çağrılan son DBI yönteminden yerel veritabanı motoru hata mesajını döndürür. Bu, yukarıda açıklanan "err" yöntemiyle aynı yaşam süresi sorunlarına sahiptir. Bu, $ DBI :: errstr veya $ h-> errstr ile eşdeğerdir.

satırlar

$rv = $h->rows; or $rv = $DBI::rows

Bu, önceki SQL ifadesinden etkilenen ve $ DBI :: satırlarına eşdeğer olan satır sayısını döndürür.

iz

$h->trace($trace_settings);

DBI, ne yaptığına dair çalışma zamanı izleme bilgileri oluşturmak için son derece yararlı bir beceriye sahiptir; bu, DBI programlarınızdaki garip sorunları izlemeye çalışırken büyük bir zaman tasarrufu sağlayabilir. İzleme seviyesini ayarlamak için farklı değerler kullanabilirsiniz. Bu değerler, 0 ile 4 arasında değişir. 0 değeri, izlemeyi devre dışı bırakma anlamına gelir ve 4, tam izleme oluştur anlamına gelir.

Yorumlanmış İfadeler Yasaktır

Aşağıdaki gibi enterpolasyonlu ifadelerin kullanılmaması şiddetle tavsiye edilir -

while ($first_name = <>) { my $sth = $dbh->prepare("SELECT * FROM TEST_TABLE WHERE FIRST_NAME = '$first_name'");
   $sth->execute();
   # and so on ...
}

Bu nedenle, enterpolasyonlu ifadeler kullanmayın. bind value dinamik SQL deyimi hazırlamak.

CGI nedir?

  • Ortak Ağ Geçidi Arayüzü veya CGI, bilgilerin web sunucusu ile özel bir komut dosyası arasında nasıl değiş tokuş edildiğini tanımlayan bir standartlar kümesidir.

  • CGI özellikleri şu anda NCSA tarafından korunmaktadır ve NCSA, CGI'yi aşağıdaki gibi tanımlar -

  • Ortak Ağ Geçidi Arayüzü veya CGI, harici ağ geçidi programlarının HTTP sunucuları gibi bilgi sunucuları ile arayüz oluşturması için bir standarttır.

  • Mevcut sürüm CGI / 1.1'dir ve CGI / 1.2 devam etmektedir.

Web Tarama

CGI kavramını anlamak için, belirli bir web sayfasına veya URL'ye göz atmak için bir web sayfasında bulunan bir hiper bağlantıya tıkladığımızda ne olduğunu görelim.

  • Tarayıcınız HTTP protokolünü kullanarak web sunucusuyla bağlantı kurar ve URL için talepte bulunur, yani web sayfası dosya adı.

  • Web Sunucusu URL'yi kontrol edecek ve istenen dosya adını arayacaktır. Web sunucusu bu dosyayı bulursa, başka bir yürütme yapmadan dosyayı tarayıcıya geri gönderir, aksi takdirde yanlış bir dosya talep ettiğinizi belirten bir hata mesajı gönderir.

  • Web tarayıcısı, web sunucusundan yanıt alır ve alınan dosya içeriğini veya dosyanın bulunamaması durumunda bir hata mesajı görüntüler.

Bununla birlikte, HTTP sunucusunu, belirli bir dizindeki bir dosya istendiğinde o dosya geri gönderilmeyecek şekilde kurmak mümkündür; bunun yerine bir program olarak yürütülür ve sonuç olarak o programın çıktısı ne olursa olsun, tarayıcınızın görüntülemesi için geri gönderilir. Bu, web sunucusunda bulunan özel bir işlev kullanılarak yapılabilir ve bunaCommon Gateway Interfaceveya CGI ve sunucu tarafından nihai sonucu üretmek için yürütülen bu tür programlara CGI betikleri denir. Bu CGI programları bir PERL Script, Shell Script, C veya C ++ programı vb. Olabilir.

CGI Mimari Diyagramı

Web Sunucusu Desteği ve Yapılandırması

CGI Programlamaya devam etmeden önce, Web Sunucunuzun CGI işlevselliğini desteklediğinden ve CGI programlarını işleyecek şekilde yapılandırıldığından emin olun. Web sunucusu tarafından yürütülecek tüm CGI programları önceden yapılandırılmış bir dizinde tutulur. Bu dizine CGI dizini adı verilir ve geleneksel olarak / cgi-bin olarak adlandırılır. Geleneksel olarak Perl CGI dosyalarının uzantısı şu şekilde olacaktır:.cgi.

İlk CGI Programı

Burada, merhaba.cgi adlı bir CGI betiğine bağlı basit bir bağlantı var . Bu dosya saklandı/cgi-bin/dizin ve aşağıdaki içeriğe sahiptir. CGI programınızı çalıştırmadan önce, dosya modunu değiştirdiğinizden emin olun.chmod 755 hello.cgi UNIX komutu.

#!/usr/bin/perl

print "Content-type:text/html\r\n\r\n";
print '<html>';
print '<head>';
print '<title>Hello Word - First CGI Program</title>';
print '</head>';
print '<body>';
print '<h2>Hello Word! This is my first CGI program</h2>';
print '</body>';
print '</html>';

1;

Şimdi tıklarsan hello.cgi bağlantı daha sonra istek, / cgi-bin dizininde hello.cgi'yi arayan, çalıştıran ve sonuç ne olursa olsun, web sunucusu bu sonucu web tarayıcısına geri gönderir, bu da aşağıdaki gibidir -

Hello Word! This is my first CGI program

Bu merhaba.cgi betiği, çıktısını STDOUT dosyasına yani ekrana yazan basit bir Perl betiğidir. Basılacak ilk satır olan önemli ve ekstra bir özellik vardır.Content-type:text/html\r\n\r\n. Bu satır tarayıcıya geri gönderilir ve tarayıcı ekranında görüntülenecek içerik türünü belirtir. Artık temel CGI kavramını anlamış olmalısınız ve Perl kullanarak birçok karmaşık CGI programı yazabilirsiniz. Bu komut dosyası, bir veritabanı, web hizmetleri veya diğer karmaşık arayüzler gibi bilgi alışverişi yapmak için herhangi bir başka uygulama sistemiyle etkileşime girebilir.

HTTP Üstbilgisini Anlamak

İlk satır Content-type:text/html\r\n\r\ntarayıcının gelen içeriği sunucu tarafından anlayabilmesi için tarayıcıya gönderilen HTTP başlığının bir parçasıdır. Tüm HTTP üstbilgileri aşağıdaki biçimde olacaktır -

HTTP Field Name: Field Content

Örneğin -

Content-type:text/html\r\n\r\n

CGI Programlamanızda sıklıkla kullanacağınız birkaç önemli HTTP başlığı vardır.

Sr.No. Üstbilgi ve Açıklama
1

Content-type: String

Döndürülen içeriğin biçimini tanımlayan bir MIME dizesi. Örnek, İçerik türü: metin / html

2

Expires: Date String

Bilginin geçersiz hale geldiği tarih. Bu, bir sayfanın ne zaman yenilenmesi gerektiğine karar vermek için tarayıcı tarafından kullanılmalıdır. Geçerli bir tarih dizesi 01 Ocak 1998 12:00:00 GMT biçiminde olmalıdır.

3

Location: URL String

İstenen URL yerine döndürülmesi gereken URL. Bir isteği başka bir yere yeniden yönlendirmek için bunu dosyalanmış olarak kullanabilirsiniz.

4

Last-modified: String

Dosyanın son değiştirilme tarihi.

5

Content-length: String

Döndürülen verilerin bayt cinsinden uzunluğu. Tarayıcı, bir dosyanın tahmini indirme süresini bildirmek için bu değeri kullanır.

6

Set-Cookie: String

Geçirilir çerez ayarla dize

CGI Ortam Değişkenleri

Tüm CGI programı aşağıdaki ortam değişkenlerine erişime sahip olacaktır. Bu değişkenler, herhangi bir CGI programını yazarken önemli bir rol oynar.

Sr.No. Değişkenler İsimler ve Açıklama
1

CONTENT_TYPE

İçeriğin veri türü. İstemci, sunucuya ekli içerik gönderirken kullanılır. Örneğin dosya yükleme vb.

2

CONTENT_LENGTH

Sorgu bilgilerinin uzunluğu. Yalnızca POST istekleri için kullanılabilir

3

HTTP_COOKIE

Ayarlanan çerezleri anahtar ve değer çifti biçiminde döndürür.

4

HTTP_USER_AGENT

User-Agent istek başlığı alanı, isteği başlatan kullanıcı aracısı hakkında bilgi içerir. Web tarayıcısının adı.

5

PATH_INFO

CGI komut dosyasının yolu.

6

QUERY_STRING

GET yöntemi isteği ile gönderilen URL kodlu bilgiler.

7

REMOTE_ADDR

İstekte bulunan uzak ana bilgisayarın IP adresi. Bu, oturum açma veya kimlik doğrulama amacıyla yararlı olabilir.

8

REMOTE_HOST

İstekte bulunan ana bilgisayarın tam nitelikli adı. Bu bilgi mevcut değilse, IR adresini almak için REMOTE_ADDR kullanılabilir.

9

REQUEST_METHOD

İsteği yapmak için kullanılan yöntem. En yaygın yöntemler GET ve POST'tur.

10

SCRIPT_FILENAME

CGI betiğinin tam yolu.

11

SCRIPT_NAME

CGI komut dosyasının adı.

12

SERVER_NAME

Sunucunun ana bilgisayar adı veya IP Adresi.

13

SERVER_SOFTWARE

Sunucunun çalıştırdığı yazılımın adı ve sürümü.

Web sunucunuz tarafından desteklenen tüm CGI değişkenlerini listelemek için küçük bir CGI programı. Get Environment sonucunu görmek için bu bağlantıyı tıklayın

#!/usr/bin/perl

print "Content-type: text/html\n\n";
print "<font size=+1>Environment</font>\n";
foreach (sort keys %ENV) {
   print "<b>$_</b>: $ENV{$_}<br>\n";
}

1;

"Dosya İndirme" İletişim Kutusu Yükseltilsin mi?

Bazen, kullanıcının bir bağlantıyı tıklatacağı ve gerçek içeriği görüntülemek yerine kullanıcıya bir "Dosya İndirme" iletişim kutusu açacağı bir seçenek vermeniz istenir. Bu çok kolaydır ve HTTP başlığı ile elde edilecektir.

Bu HTTP başlığı, önceki bölümde bahsedilen başlıktan farklı olacaktır. Örneğin, birFileName dosya belirli bir bağlantıdan indirilebilirse, sözdizimi aşağıdaki gibi olacaktır -

#!/usr/bin/perl

# HTTP Header
print "Content-Type:application/octet-stream; name = \"FileName\"\r\n";
print "Content-Disposition: attachment; filename = \"FileName\"\r\n\n";

# Actual File Content will go hear.
open( FILE, "<FileName" );
while(read(FILE, $buffer, 100) ) { print("$buffer");
}

GET ve POST Yöntemleri

Bazı bilgileri tarayıcınızdan web sunucusuna ve nihayetinde isteklerinizi ele alan CGI Programınıza aktarmanız gerektiğinde birçok durumla karşılaşmış olmalısınız. Çoğu zaman tarayıcı, bu bilgiyi web sunucusuna iletmek için iki yöntem kullanır. Bu yöntemlerGET Yöntem ve POSTYöntem. Tek tek kontrol edelim.

GET Yöntemini Kullanarak Bilgi Aktarma

GET yöntemi, sayfa URL'sinin kendisine eklenen kodlanmış kullanıcı bilgilerini gönderir. Sayfa ve kodlanmış bilgiler,? aşağıdaki gibi karakter -

http://www.test.com/cgi-bin/hello.cgi?key1=value1&key2=value2

GET yöntemi, bir tarayıcıdan web sunucusuna bilgi iletmek için varsayılan yöntemdir ve tarayıcınızın Konum: kutusunda görünen uzun bir dize üretir. Sunucuya iletmek için parolanız veya diğer hassas bilgileriniz varsa asla GET yöntemini kullanmamalısınız. GET yönteminin boyut sınırlaması vardır: bir istek dizesinde yalnızca 1024 karakter iletilebilir.

Bu bilgiler kullanılarak geçirilir QUERY_STRING başlığı ve CGI programınızda ayrıştırıp kullanabileceğiniz QUERY_STRING ortam değişkeni aracılığıyla CGI Programınızda erişilebilir olacaktır.

Bilgileri herhangi bir URL ile birlikte anahtar ve değer çiftlerini birleştirerek iletebilir veya GET yöntemini kullanarak bilgileri iletmek için HTML <FORM> etiketlerini kullanabilirsiniz.

Basit URL Örneği: Alma Yöntemi

İşte GET yöntemini kullanarak hello_get.cgi programına iki değer iletecek basit bir URL.

http://www.tutorialspoint.com/cgi-bin/hello_get.cgi?first_name=ZARA&last_name=ALI

Aşağıda hello_get.cgi web tarayıcısı tarafından verilen girişi işlemek için komut dosyası.

#!/usr/bin/perl

local ($buffer, @pairs, $pair, $name, $value, %FORM);
# Read in text
$ENV{'REQUEST_METHOD'} =~ tr/a-z/A-Z/; if ($ENV{'REQUEST_METHOD'} eq "GET") {
   $buffer = $ENV{'QUERY_STRING'};
}
# Split information into name/value pairs
@pairs = split(/&/, $buffer); foreach $pair (@pairs) {
   ($name, $value) = split(/=/, $pair); $value =~ tr/+/ /;
   $value =~ s/%(..)/pack("C", hex($1))/eg;
   $FORM{$name} = $value; } $first_name = $FORM{first_name}; $last_name  = $FORM{last_name}; print "Content-type:text/html\r\n\r\n"; print "<html>"; print "<head>"; print "<title>Hello - Second CGI Program</title>"; print "</head>"; print "<body>"; print "<h2>Hello $first_name $last_name - Second CGI Program</h2>";
print "</body>";
print "</html>";

1;

Basit FORM Örneği: GET Yöntemi

HTML FORM'u ve gönder düğmesini kullanarak iki değer ileten basit bir örnek. Bu girdiyi işlemek için aynı CGI betiğini hello_get.cgi kullanacağız.

<FORM action = "/cgi-bin/hello_get.cgi" method = "GET">
First Name: <input type = "text" name = "first_name">  <br>

Last Name: <input type = "text" name = "last_name">
<input type = "submit" value = "Submit">
</FORM>

İşte yukarıdaki form kodlamasının gerçek çıktısı. Şimdi Adı ve Soyadı girebilir ve ardından sonucu görmek için gönder düğmesine tıklayabilirsiniz.

POST Yöntemini Kullanarak Bilgi Aktarma

Bir CGI programına bilgi aktarmanın daha güvenilir bir yöntemi, POSTyöntem. Bu, bilgileri GET yöntemleriyle tamamen aynı şekilde paketler, ancak bunu bir metin dizesi olarak göndermek yerine?URL'de, bunu HTTP başlığının bir parçası olarak ayrı bir mesaj olarak gönderir. Web sunucusu, bu mesajı CGI betiğine standart girdi biçiminde sağlar.

Aşağıda değiştirilmiş hello_post.cgiweb tarayıcısı tarafından verilen girişi işlemek için komut dosyası. Bu komut dosyası GET ve POST yöntemini işleyecektir.

#!/usr/bin/perl

local ($buffer, @pairs, $pair, $name, $value, %FORM); # Read in text $ENV{'REQUEST_METHOD'} =~ tr/a-z/A-Z/;
if ($ENV{'REQUEST_METHOD'} eq "POST") { read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); } else { $buffer = $ENV{'QUERY_STRING'}; } # Split information into name/value pairs @pairs = split(/&/, $buffer);
foreach $pair (@pairs) { ($name, $value) = split(/=/, $pair);
   $value =~ tr/+/ /; $value =~ s/%(..)/pack("C", hex($1))/eg; $FORM{$name} = $value;
}
$first_name = $FORM{first_name};
$last_name = $FORM{last_name};

print "Content-type:text/html\r\n\r\n";
print "<html>";
print "<head>";
print "<title>Hello - Second CGI Program</title>";
print "</head>";
print "<body>";
print "<h2>Hello $first_name $last_name - Second CGI Program</h2>";
print "</body>";
print "</html>";

1;

HTML FORM ve gönder düğmesini kullanarak iki değeri geçen yukarıdaki sınava tekrar girelim. Bu girdiyi işlemek için CGI betiğini hello_post.cgi kullanacağız.

<FORM action = "/cgi-bin/hello_post.cgi" method = "POST">
First Name: <input type = "text" name = "first_name">  <br>

Last Name: <input type = "text" name = "last_name">

<input type = "submit" value = "Submit">
</FORM>

İşte yukarıdaki form kodlamasının asıl çıktısı, Adı ve Soyadı girip sonucu görmek için gönder düğmesine tıklayın.

Onay Kutusu Verilerini CGI Programına Aktarma

Onay kutuları, birden fazla seçeneğin seçilmesi gerektiğinde kullanılır. İki onay kutusu olan bir form için örnek bir HTML kodu aşağıda verilmiştir.

<form action = "/cgi-bin/checkbox.cgi" method = "POST" target = "_blank">
<input type = "checkbox" name = "maths" value = "on"> Maths
<input type = "checkbox" name = "physics" value = "on"> Physics
<input type = "submit" value = "Select Subject">
</form>

Bu kodun sonucu aşağıdaki biçimdir -

Aşağıda checkbox.cgi radyo düğmesi için web tarayıcısı tarafından verilen girişi işlemek için komut dosyası.

#!/usr/bin/perl

local ($buffer, @pairs, $pair, $name, $value, %FORM);
# Read in text
$ENV{'REQUEST_METHOD'} =~ tr/a-z/A-Z/; if ($ENV{'REQUEST_METHOD'} eq "POST") {
   read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
} else {
   $buffer = $ENV{'QUERY_STRING'};
}
# Split information into name/value pairs
@pairs = split(/&/, $buffer); foreach $pair (@pairs) {
   ($name, $value) = split(/=/, $pair); $value =~ tr/+/ /;
   $value =~ s/%(..)/pack("C", hex($1))/eg;
   $FORM{$name} = $value; } if( $FORM{maths} ) {
   $maths_flag ="ON"; } else { $maths_flag ="OFF";
}
if( $FORM{physics} ) { $physics_flag ="ON";
} else {
   $physics_flag ="OFF"; } print "Content-type:text/html\r\n\r\n"; print "<html>"; print "<head>"; print "<title>Checkbox - Third CGI Program</title>"; print "</head>"; print "<body>"; print "<h2> CheckBox Maths is : $maths_flag</h2>";
print "<h2> CheckBox Physics is : $physics_flag</h2>";
print "</body>";
print "</html>";

1;

Radyo Düğmesi Verilerini CGI Programına Aktarma

Radyo Düğmeleri, yalnızca bir seçeneğin seçilmesi gerektiğinde kullanılır. İşte iki radyo düğmesi olan bir form için örnek bir HTML kodu -

<form action = "/cgi-bin/radiobutton.cgi" method = "POST" target = "_blank">
<input type = "radio" name = "subject" value = "maths"> Maths
<input type = "radio" name = "subject" value = "physics"> Physics
<input type = "submit" value = "Select Subject">
</form>

Bu kodun sonucu aşağıdaki biçimdir -

Aşağıda radiobutton.cgi radyo düğmesi için web tarayıcısı tarafından verilen girişi işlemek için komut dosyası.

#!/usr/bin/perl

local ($buffer, @pairs, $pair, $name, $value, %FORM); # Read in text $ENV{'REQUEST_METHOD'} =~ tr/a-z/A-Z/;
if ($ENV{'REQUEST_METHOD'} eq "POST") { read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); } else { $buffer = $ENV{'QUERY_STRING'}; } # Split information into name/value pairs @pairs = split(/&/, $buffer);
foreach $pair (@pairs) { ($name, $value) = split(/=/, $pair);
   $value =~ tr/+/ /; $value =~ s/%(..)/pack("C", hex($1))/eg; $FORM{$name} = $value;
}
$subject = $FORM{subject};

print "Content-type:text/html\r\n\r\n";
print "<html>";
print "<head>";
print "<title>Radio - Fourth CGI Program</title>";
print "</head>";
print "<body>";
print "<h2> Selected Subject is $subject</h2>";
print "</body>";
print "</html>";

1;

Metin Alanı Verilerini CGI Programına Aktarma

Çok satırlı metnin CGI Programına aktarılması gerektiğinde bir metin alanı öğesi kullanılır. İşte TEXTAREA kutusu olan bir form için örnek bir HTML kodu -

<form action = "/cgi-bin/textarea.cgi" method = "POST" target = "_blank">
<textarea name = "textcontent" cols = 40 rows = 4>
Type your text here...
</textarea>
<input type = "submit" value = "Submit">
</form>

Bu kodun sonucu aşağıdaki biçimdir -

Aşağıda textarea.cgi web tarayıcısı tarafından verilen girişi işlemek için komut dosyası.

#!/usr/bin/perl

local ($buffer, @pairs, $pair, $name, $value, %FORM); # Read in text $ENV{'REQUEST_METHOD'} =~ tr/a-z/A-Z/;
if ($ENV{'REQUEST_METHOD'} eq "POST") { read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); } else { $buffer = $ENV{'QUERY_STRING'}; } # Split information into name/value pairs @pairs = split(/&/, $buffer);
foreach $pair (@pairs) { ($name, $value) = split(/=/, $pair);
   $value =~ tr/+/ /; $value =~ s/%(..)/pack("C", hex($1))/eg; $FORM{$name} = $value;
}
$text_content = $FORM{textcontent};

print "Content-type:text/html\r\n\r\n";
print "<html>";
print "<head>";
print "<title>Text Area - Fifth CGI Program</title>";
print "</head>";
print "<body>";
print "<h2> Entered Text Content is $text_content</h2>";
print "</body>";
print "</html>";

1;

Açılır Kutu Verilerini CGI Programına Aktarma

Birçok seçeneğimiz olduğunda açılır kutu kullanılır, ancak yalnızca bir veya iki tanesi seçilecektir. Bir açılır kutuya sahip bir form için örnek HTML kodu

<form action = "/cgi-bin/dropdown.cgi" method = "POST" target = "_blank">
<select name = "dropdown">
<option value = "Maths" selected>Maths</option>
<option value = "Physics">Physics</option>
</select>
<input type = "submit" value = "Submit">
</form>

Bu kodun sonucu aşağıdaki biçimdir -

Aşağıda dropdown.cgi web tarayıcısı tarafından verilen girişi işlemek için komut dosyası.

#!/usr/bin/perl

local ($buffer, @pairs, $pair, $name, $value, %FORM); # Read in text $ENV{'REQUEST_METHOD'} =~ tr/a-z/A-Z/;
if ($ENV{'REQUEST_METHOD'} eq "POST") { read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); } else { $buffer = $ENV{'QUERY_STRING'}; } # Split information into name/value pairs @pairs = split(/&/, $buffer);
foreach $pair (@pairs) { ($name, $value) = split(/=/, $pair);
   $value =~ tr/+/ /; $value =~ s/%(..)/pack("C", hex($1))/eg; $FORM{$name} = $value;
}
$subject = $FORM{dropdown};

print "Content-type:text/html\r\n\r\n";
print "<html>";
print "<head>";
print "<title>Dropdown Box - Sixth CGI Program</title>";
print "</head>";
print "<body>";
print "<h2> Selected Subject is $subject</h2>";
print "</body>";
print "</html>";

1;

CGI'da Çerez Kullanımı

HTTP protokolü, durum bilgisi olmayan bir protokoldür. Ancak ticari bir web sitesi için, oturum bilgilerinin farklı sayfalar arasında tutulması gerekir. Örneğin bir kullanıcı kaydı, birçok sayfaya yayılan işlemlerden sonra sona erer. Ancak tüm web sayfalarında kullanıcının oturum bilgilerini nasıl koruyabilirim?

Çoğu durumda, çerezlerin kullanılması tercihleri, satın alımları, komisyonları ve daha iyi ziyaretçi deneyimi veya site istatistikleri için gerekli diğer bilgileri hatırlamanın ve izlemenin en etkili yöntemidir.

Nasıl çalışır

Sunucunuz bazı verileri ziyaretçinin tarayıcısına çerez şeklinde gönderir. Tarayıcı çerezi kabul edebilir. Varsa, ziyaretçinin sabit diskinde düz metin kaydı olarak saklanır. Artık, ziyaretçi sitenizdeki başka bir sayfaya geldiğinde, çerez geri alınabilir. Alındıktan sonra, sunucunuz neyin depolandığını bilir / hatırlar.

Çerezler, 5 değişken uzunluklu alanın düz metin veri kaydıdır -

  • Expires- Çerezin süresinin dolacağı tarih. Bu boşsa, çerez, ziyaretçi tarayıcıdan çıktığında sona erecektir.

  • Domain - Sitenizin alan adı.

  • Path- Çerezi ayarlayan dizinin veya web sayfasının yolu. Çerezi herhangi bir dizinden veya sayfadan almak istiyorsanız bu boş olabilir.

  • Secure- Bu alan "güvenli" kelimesini içeriyorsa, tanımlama bilgisi yalnızca güvenli bir sunucu ile alınabilir. Bu alan boşsa, böyle bir kısıtlama yoktur.

  • Name = Value - Çerezler, anahtar ve değer çiftleri şeklinde ayarlanır ve yeniden incelenir.

Çerezleri Kurmak

Çerezleri tarayıcıya göndermek çok kolaydır. Bu çerezler, HTTP Başlığı ile birlikte gönderilecektir. Kullanıcı Kimliği ve Parolayı tanımlama bilgileri olarak ayarlamak istediğinizi varsayarsak. Yani şu şekilde yapılacaktır -

#!/usr/bin/perl

print "Set-Cookie:UserID = XYZ;\n";
print "Set-Cookie:Password = XYZ123;\n";
print "Set-Cookie:Expires = Tuesday, 31-Dec-2007 23:12:40 GMT";\n";
print "Set-Cookie:Domain = www.tutorialspoint.com;\n";
print "Set-Cookie:Path = /perl;\n";
print "Content-type:text/html\r\n\r\n";
...........Rest of the HTML Content goes here....

Burada kullandık Set-CookieÇerezleri ayarlamak için HTTP başlığı. Expires, Domain ve Path gibi çerez özelliklerini ayarlamak isteğe bağlıdır. Çerezlerin sihirli hat gönderilmeden önce ayarlandığını unutmamak önemlidir."Content-type:text/html\r\n\r\n.

Çerezleri Alma

Tüm ayarlanan çerezleri geri almak çok kolaydır. Çerezler, CGI ortam değişkeni HTTP_COOKIE'de saklanır ve aşağıdaki biçime sahip olacaklardır.

key1 = value1;key2 = value2;key3 = value3....

Çerezlerin nasıl alınacağına dair bir örnek.

#!/usr/bin/perl
$rcvd_cookies = $ENV{'HTTP_COOKIE'}; @cookies = split /;/, $rcvd_cookies;
foreach $cookie ( @cookies ) { ($key, $val) = split(/=/, $cookie); # splits on the first =.
   $key =~ s/^\s+//; $val =~ s/^\s+//;
   $key =~ s/\s+$//;
   $val =~ s/\s+$//;
   if( $key eq "UserID" ) { $user_id = $val; } elsif($key eq "Password") {
      $password = $val;
   }
}
print "User ID  = $user_id\n"; print "Password = $password\n";

Bu, yukarıdaki tanımlama bilgilerinin geri alma tanımlama komut dosyası çağrılmadan önce ayarlanmış olması koşuluyla, aşağıdaki sonucu üretecektir.

User ID = XYZ
Password = XYZ123

CGI Modülleri ve Kitaplıkları

İnternet üzerinden CGI programınızda kullanabileceğiniz doğrudan işlevler sağlayan birçok yerleşik modül bulacaksınız. Aşağıdakiler önemli olanlardır.

  • CGI Modülü

  • Berkeley cgi-lib.pl

Paketler nedir?

packagedeyimi, geçerli adlandırma bağlamını belirli bir ad alanına (sembol tablosu) değiştirir. Böylece -

  • Paket, kendi ad alanında yaşayan bir kod koleksiyonudur.

  • Bir ad alanı, benzersiz değişken adlarından oluşan adlandırılmış bir koleksiyondur (sembol tablosu da denir).

  • Ad alanları, paketler arasında değişken ad çakışmalarını önler.

  • Paketler, kullanıldıklarında değişkenleri ve modüllerin kendi ad alanının dışındaki işlevleri engellemeyen modüllerin oluşturulmasını sağlar.

  • Paket, başka bir paket ifadesi çağrılana kadar veya geçerli bloğun veya dosyanın sonuna kadar etkin kalır.

  • Bir paket içindeki değişkenlere açıkça başvurabilirsiniz. :: paket niteleyici.

Aşağıda, bir dosyada main ve Foo paketleri bulunan bir örnek verilmiştir. Burada, paket adını yazdırmak için özel değişken __PACKAGE__ kullanılmıştır.

#!/usr/bin/perl

# This is main package
$i = 1; print "Package name : " , __PACKAGE__ , " $i\n"; 

package Foo;
# This is Foo package
$i = 10; print "Package name : " , __PACKAGE__ , " $i\n"; 

package main;
# This is again main package
$i = 100; print "Package name : " , __PACKAGE__ , " $i\n"; 
print "Package name : " , __PACKAGE__ ,  " $Foo::i\n"; 

1;

Yukarıdaki kod çalıştırıldığında, aşağıdaki sonucu verir -

Package name : main 1
Package name : Foo 10
Package name : main 100
Package name : main 10

BEGIN ve END Blokları

Sırasıyla kurucu ve yıkıcı görevi gören BEGIN ve END adlı herhangi bir sayıda kod bloğu tanımlayabilirsiniz.

BEGIN { ... }
END { ... }
BEGIN { ... }
END { ... }
  • Her BEGIN blok, perl betiği yüklendikten ve derlendikten sonra, ancak başka herhangi bir ifade çalıştırılmadan önce yürütülür.

  • Her END bloğu, perl yorumlayıcısı çıkmadan hemen önce yürütülür.

  • BEGIN ve END blokları, Perl modülleri oluştururken özellikle kullanışlıdır.

Aşağıdaki örnek, kullanımını göstermektedir -

#!/usr/bin/perl

package Foo;
print "Begin and Block Demo\n";

BEGIN { 
   print "This is BEGIN Block\n" 
}

END { 
   print "This is END Block\n" 
}

1;

Yukarıdaki kod çalıştırıldığında, aşağıdaki sonucu verir -

This is BEGIN Block
Begin and Block Demo
This is END Block

Perl Modülleri nedir?

Perl modülü, adı .pm uzantılı paketin adıyla aynı olan bir kitaplık dosyasında tanımlanan yeniden kullanılabilir bir pakettir.

Perl modül dosyası Foo.pm bunun gibi ifadeler içerebilir.

#!/usr/bin/perl

package Foo;
sub bar { 
   print "Hello $_[0]\n" 
}

sub blat { 
   print "World $_[0]\n" 
}
1;

Perl modülleri hakkında birkaç önemli nokta

  • Fonksiyonlar require ve use bir modül yükleyecektir.

  • Her ikisi de arama yollarının listesini kullanır @INC modülü bulmak için.

  • Her iki işlev require ve use ara eval kodu işlemek için işlev.

  • 1; en alttaki değerlendirme DOĞRU olarak değerlendirilmesine neden olur (ve dolayısıyla başarısız olmaz).

Gerekli Fonksiyon

Bir modül çağırılarak yüklenebilir. require aşağıdaki gibi işlev -

#!/usr/bin/perl

require Foo;

Foo::bar( "a" );
Foo::blat( "b" );

Alt rutin adlarının onları çağırmak için tam olarak nitelendirilmesi gerektiğini fark etmiş olmalısınız. Alt programı etkinleştirmek güzel olurdubar ve blat Foo :: niteleyicisini kullanmak zorunda kalmamak için kendi isim alanımıza aktarılacak.

Kullanım Fonksiyonu

Bir modül çağırılarak yüklenebilir. use işlevi.

#!/usr/bin/perl

use Foo;

bar( "a" );
blat( "b" );

Paketin işlev adlarını tam olarak nitelendirmemize gerek olmadığına dikkat edin. use işlevi, bir modülün içine eklenen birkaç deyimle birlikte bir modülden sembollerin bir listesini dışa aktarır.

require Exporter;
@ISA = qw(Exporter);

Ardından, adlı liste değişkenini doldurarak sembollerin bir listesini (skalarlar, listeler, karmalar, alt yordamlar vb.) Sağlayın @EXPORT: Örneğin -

package Module;

require Exporter;
@ISA = qw(Exporter);
@EXPORT = qw(bar blat);

sub bar { print "Hello $_[0]\n" }
sub blat { print "World $_[0]\n" } sub splat { print "Not $_[0]\n" }  # Not exported!

1;

Perl Modül Ağacı Oluşturun

Perl modülünüzü göndermeye hazır olduğunuzda, Perl Modül Ağacı oluşturmanın standart bir yolu vardır. Bu kullanılarak yapılırh2xsYarar. Bu yardımcı program Perl ile birlikte gelir. İşte h2xs kullanmak için sözdizimi -

$h2xs -AX -n  ModuleName

Örneğin, modülünüz mevcutsa Person.pm dosyasını açın, ardından aşağıdaki komutu çalıştırın -

$h2xs -AX -n Person

Bu, aşağıdaki sonucu verecektir -

Writing Person/lib/Person.pm
Writing Person/Makefile.PL
Writing Person/README
Writing Person/t/Person.t
Writing Person/Changes
Writing Person/MANIFEST

İşte bu seçeneklerin açıklaması -

  • -A Autoloader kodunu çıkarır (en iyi, çok sayıda seyrek kullanılan alt rutini tanımlayan modüller tarafından kullanılır).

  • -X XS öğelerini (eXternal Subroutine, burada eXternal Perl'e harici anlamına gelir, yani C) çıkarır.

  • -n modülün adını belirtir.

Yani yukarıdaki komut Kişi dizini içinde aşağıdaki yapıyı oluşturur. Gerçek sonuç yukarıda gösterilmiştir.

  • Changes
  • Makefile.PL
  • MANIFEST (paketteki tüm dosyaların listesini içerir)
  • README
  • t / (test dosyaları)
  • lib / (Gerçek kaynak kodu buraya gelir

Sonunda sen tarbu dizin yapısını bir Person.tar.gz dosyası haline getirip gönderebilirsiniz. README dosyasını uygun talimatlarla güncellemeniz gerekecektir. Ayrıca t dizininde bazı test örnekleri dosyaları da sağlayabilirsiniz.

Perl Modülünü Kurmak

Tar.gz dosyası biçiminde bir Perl modülü indirin. Herhangi bir Perl Modülünü kurmak için aşağıdaki sırayı kullanınPerson.pm olarak indirilen Person.tar.gz dosya.

tar xvfz Person.tar.gz
cd Person
perl Makefile.PL
make
make install

Perl yorumlayıcısının modülleri aradığı bir dizin listesi vardır (global dizi @INC).

Gereksinimlerinize göre yeni süreçler oluşturmak için Perl'i çeşitli şekillerde kullanabilirsiniz. Bu eğitici, Perl süreçlerini oluşturmak ve yönetmek için birkaç önemli ve en sık kullanılan yöntemleri listeleyecektir.

  • Özel değişkenler kullanabilirsiniz $$ veya $PROCESS_ID mevcut işlem kimliğini almak için.

  • Bahsedilen yöntemlerden herhangi biri kullanılarak oluşturulan her işlem, kendi sanal ortamını içinde barındırır. %ENV değişken.

  • exit() işlev her zaman yalnızca bu işlevi yürüten alt süreçten çıkar ve bir bütün olarak ana süreç, çalışan tüm alt süreçler çıkmadıkça çıkmaz.

  • Tüm açık tutamaçlar alt süreçlerde çift () tutulur, böylece bir işlemdeki herhangi bir tutamaçları kapatmak diğerlerini etkilemez.

Backstick Operatörü

Herhangi bir Unix komutunu çalıştırmanın bu en basit yolu, backstick operatörünü kullanmaktır. Komutunuzu basitçe backstick operatörünün içine koyarsınız, bu komutun yürütülmesine neden olur ve aşağıdaki gibi kaydedilebilen sonucunu döndürür

#!/usr/bin/perl

@files = `ls -l`;

foreach $file (@files) { print $file;
}

1;

Yukarıdaki kod yürütüldüğünde, geçerli dizinde bulunan tüm dosyaları ve dizinleri listeler -

drwxr-xr-x 3 root root 4096 Sep 14 06:46 9-14
drwxr-xr-x 4 root root 4096 Sep 13 07:54 android
-rw-r--r-- 1 root root  574 Sep 17 15:16 index.htm
drwxr-xr-x 3  544  401 4096 Jul  6 16:49 MIME-Lite-3.01
-rw-r--r-- 1 root root   71 Sep 17 15:16 test.pl
drwx------ 2 root root 4096 Sep 17 15:11 vAtrJdy

System () Fonksiyonu

Ayrıca kullanabilirsin system()Çıktısı perl betiğinin çıktısına gidecek olan herhangi bir Unix komutunu yürütmek için işlev. Varsayılan olarak ekrandır, yani STDOUT, ancak yeniden yönlendirme operatörünü kullanarak herhangi bir dosyaya yeniden yönlendirebilirsiniz> -

#!/usr/bin/perl

system( "ls -l")

1;

Yukarıdaki kod çalıştırıldığında, geçerli dizinde bulunan tüm dosyaları ve dizinleri listeler -

drwxr-xr-x 3 root root 4096 Sep 14 06:46 9-14
drwxr-xr-x 4 root root 4096 Sep 13 07:54 android
-rw-r--r-- 1 root root  574 Sep 17 15:16 index.htm
drwxr-xr-x 3  544  401 4096 Jul  6 16:49 MIME-Lite-3.01
-rw-r--r-- 1 root root   71 Sep 17 15:16 test.pl
drwx------ 2 root root 4096 Sep 17 15:11 vAtrJdy

Komutunuz gibi kabuk çevresel değişkenleri içerdiğinde dikkatli olun. $PATH or $EV. Üç senaryoyu takip etmeyi deneyin -

#!/usr/bin/perl

$PATH = "I am Perl Variable"; system('echo $PATH');  # Treats $PATH as shell variable system("echo $PATH");  # Treats $PATH as Perl variable system("echo \$PATH"); # Escaping $ works.

1;

Yukarıdaki kod çalıştırıldığında, $ PATH kabuk değişkeninde neyin ayarlandığına bağlı olarak aşağıdaki sonucu üretir.

/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin
I am Perl Variable
/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin

Fork () Fonksiyonu

Perl, bir fork()aynı adlı Unix sistem çağrısına karşılık gelen işlev. Fork () sistem çağrısının mevcut olduğu çoğu Unix benzeri platformda, Perl'in fork () basitçe onu çağırır. Fork () sistem çağrısının kullanılamadığı Windows gibi bazı platformlarda, yorumlayıcı düzeyinde fork () benzetimi yapmak için Perl oluşturulabilir.

Fork () işlevi, mevcut bir işlemi klonlamak için kullanılır. Bu çağrı, aynı programı aynı noktada çalıştıran yeni bir işlem yaratır. Çocuk pid'i üst sürece, 0'ı alt sürece veya çatal başarısız olursa undef'e döndürür.

Kullanabilirsiniz exec() ayrı bir işlem alanında yürütülecek ve exec () bu işlemle aynı çıkış durumuyla çıkmadan önce tamamlanmasını bekleyecek olan istenen yürütülebilir dosyayı başlatmak için bir işlem içinde işlev görür.

#!/usr/bin/perl

if(!defined($pid = fork())) { # fork returned undef, so unsuccessful die "Cannot fork a child: $!";
} elsif ($pid == 0) { print "Printed by child process\n"; exec("date") || die "can't exec date: $!";
  
} else {
   # fork returned 0 nor undef
   # so this branch is parent
   print "Printed by parent process\n";
   $ret = waitpid($pid, 0);
   print "Completed process id: $ret\n";

}

1;

Yukarıdaki kod çalıştırıldığında, aşağıdaki sonucu verir -

Printed by parent process
Printed by child process
Tue Sep 17 15:41:08 CDT 2013
Completed process id: 17777

wait() ve waitpid()fork () tarafından döndürülen sözde işlem kimliği olarak aktarılabilir. Bu çağrılar, sözde sürecin sona ermesini doğru bir şekilde bekleyecek ve durumuna dönecektir. Çocuklarınızın kullanmasını beklemeden çatal yaparsanızwaitpid()işlevi, zombileri biriktireceksiniz. Unix sistemlerinde, $ SIG {CHLD} 'yi aşağıdaki gibi "IGNORE" olarak ayarlayarak bundan kaçınabilirsiniz -

#!/usr/bin/perl

local $SIG{CHLD} = "IGNORE"; if(!defined($pid = fork())) {
   # fork returned undef, so unsuccessful
   die "Cannot fork a child: $!"; } elsif ($pid == 0) {
   print "Printed by child process\n";
   exec("date") || die "can't exec date: $!"; } else { # fork returned 0 nor undef # so this branch is parent print "Printed by parent process\n"; $ret = waitpid($pid, 0); print "Completed process id: $ret\n";

}

1;

Yukarıdaki kod çalıştırıldığında, aşağıdaki sonucu verir -

Printed by parent process
Printed by child process
Tue Sep 17 15:44:07 CDT 2013
Completed process id: -1

Kill () İşlevi

Perl kill('KILL', (Process List)) işlev, fork () tarafından döndürülen kimliği ileterek sözde süreci sonlandırmak için kullanılabilir.

Bir sözde işlemde () kill ('KILL', (İşlem Listesi)) kullanmanın tipik olarak bellek sızıntılarına neden olabileceğini unutmayın, çünkü sözde işlemi uygulayan iş parçacığı kaynaklarını temizleme şansı bulamaz.

Kullanabilirsiniz kill() hedef süreçlere başka herhangi bir sinyal gönderme işlevi, örneğin aşağıdaki SIGINT'i bir işlem kimliği 104 ve 102'ye gönderir -

#!/usr/bin/perl

kill('INT', 104, 102);
 
1;

Pod (Düz Eski Metin) belgelerini Perl modüllerinize ve komut dosyalarınıza gömebilirsiniz. Aşağıda, Perl Kodunuzda gömülü belgeleri kullanma kuralı verilmiştir -

Dokümantasyonunuza boş bir satırla başlayın, a =head1 başında komut verin ve a = ile bitirincut

Perl, koda girdiğiniz Pod metnini yok sayacaktır. Aşağıda, Perl kodunuzun içinde gömülü belgeleri kullanmanın basit bir örneği verilmiştir -

#!/usr/bin/perl

print "Hello, World\n";

=head1 Hello, World Example
This example demonstrate very basic syntax of Perl.
=cut

print "Hello, Universe\n";

Yukarıdaki kod çalıştırıldığında, aşağıdaki sonucu verir -

Hello, World
Hello, Universe

Bölmenizi dosyanın sonuna koyacaksanız ve __END__ veya __DATA__ kesme işareti kullanıyorsanız, ilk Bölme komutunun önüne aşağıdaki gibi boş bir satır koyduğunuzdan emin olun, aksi takdirde daha önce boş bir satır koymayın. the =head1, birçok çevirmen =head1 bir Pod bloğu başlatırken.

#!/usr/bin/perl

print "Hello, World\n";

while(<DATA>) {
  print $_;
}

__END__

=head1 Hello, World Example
This example demonstrate very basic syntax of Perl.
print "Hello, Universe\n";

Yukarıdaki kod çalıştırıldığında, aşağıdaki sonucu verir -

Hello, World

=head1 Hello, World Example
This example demonstrate very basic syntax of Perl.
print "Hello, Universe\n";

DATA bölümünü okumadan aynı kod için bir örnek daha alalım -

#!/usr/bin/perl

print "Hello, World\n";

__END__

=head1 Hello, World Example
This example demonstrate very basic syntax of Perl.
print "Hello, Universe\n";

Yukarıdaki kod çalıştırıldığında, aşağıdaki sonucu verir -

Hello, World

POD nedir?

Pod, Perl, Perl programları ve Perl modülleri için belge yazmak için kullanılan, kullanımı kolay bir biçimlendirme dilidir. Pod'u düz metin, HTML, kılavuz sayfaları ve daha fazlası gibi çeşitli biçimlere dönüştürmek için kullanılabilen çeşitli çevirmenler vardır. Kapsül işaretlemesi, üç temel paragraf türünden oluşur:

  • Ordinary Paragraph - Kalın, italik, kod stili, köprüler ve daha fazlası için sıradan paragraflarda biçimlendirme kodlarını kullanabilirsiniz.

  • Verbatim Paragraph - Verbatim paragrafları genellikle herhangi bir özel ayrıştırma veya biçimlendirme gerektirmeyen ve kaydırılmaması gereken bir kod bloğu veya başka bir metin sunmak için kullanılır.

  • Command Paragraph- Bir komut paragrafı, genellikle başlıklar veya listelerin parçaları olarak, tüm metin parçalarının özel olarak işlenmesi için kullanılır. Tüm komut paragrafları = ile başlar, ardından bir tanımlayıcı ve ardından komutun istediği şekilde kullanabileceği rastgele bir metin gelir. Şu anda tanınan komutlar -

=pod
=head1 Heading Text
=head2 Heading Text
=head3 Heading Text
=head4 Heading Text
=over indentlevel
=item stuff
=back
=begin format
=end format
=for format text...
=encoding type
=cut

POD Örnekleri

Aşağıdaki POD'u düşünün -

=head1 SYNOPSIS
Copyright 2005 [TUTORIALSOPOINT].
=cut

Kullanabilirsiniz pod2html Linux'ta yukarıdaki POD'u HTML'ye dönüştürmek için kullanılan yardımcı program, bu nedenle aşağıdaki sonucu üretecektir -

Ardından, aşağıdaki örneği düşünün -

=head2 An Example List

=over 4
=item * This is a bulleted list.
=item * Here's another item.
=back
=begin html
<p>
Here's some embedded HTML.  In this block I can
include images, apply <span style="color: green">
styles</span>, or do anything else I can do with
HTML.  pod parsers that aren't outputting HTML will
completely ignore it.
</p>

=end html

Yukarıdaki POD'u pod2html kullanarak HTML'ye dönüştürdüğünüzde, aşağıdaki sonucu verecektir -

An Example List
   This is a bulleted list.
   Here's another item.
Here's some embedded HTML. In this block I can include images, apply 
styles, or do anything else I can do with HTML. pod parsers that aren't 
outputting HTML will completely ignore it.

Standart Perl tarafından desteklenen tüm önemli işlevlerin listesi burada.

  • abs - mutlak değer işlevi

  • kabul et - gelen bir soket bağlantısını kabul et

  • alarm - bir SIGALRM programlayın

  • atan2 - -PI ila PI aralığında Y / X'in arktanjantı

  • bind - bir adresi bir sokete bağlar

  • binmode - G / Ç için ikili dosyalar hazırlayın

  • kutsamak - bir nesne yarat

  • arayan - geçerli alt rutin çağrısının bağlamını alır

  • chdir - mevcut çalışma dizininizi değiştirin

  • chmod - bir dosya listesindeki izinleri değiştirir

  • chomp - dizeden sondaki kayıt ayırıcısını kaldırır

  • chop - dizeden son karakteri kaldırır

  • chown - dosya listesindeki owership'i değiştirin

  • chr - bu sayının temsil ettiği karakteri al

  • chroot - yol aramaları için dizini yeni kök yapar

  • kapat - dosya (veya boru veya soket) tutamacını kapat

  • closedir - dizin tutamacını kapatır

  • bağlan - uzak bir sokete bağlan

  • devam - bir süre veya her seferinde isteğe bağlı takip bloğu

  • cos - kosinüs işlevi

  • crypt - tek yönlü passwd tarzı şifreleme

  • dbmclose - bağlı bir dbm dosyasındaki bağlamayı keser

  • dbmopen - bağlı bir dbm dosyasında bağlama oluşturur

  • tanımlı - bir değerin, değişkenin veya fonksiyonun tanımlanıp tanımlanmadığını test edin

  • sil - karma değerden bir değeri siler

  • öl - bir istisna yarat ya da kurtar

  • do - BLOK'u TERM'e çevirmek

  • dökümü - anında çekirdek dökümü oluştur

  • each - bir hash'den sonraki anahtar / değer çiftini alır

  • endgrent - grup dosyası kullanılarak yapılır

  • endhostent - ana bilgisayar dosyası kullanılarak yapılır

  • endnetent - ağlar dosyası kullanılarak yapılır

  • endprotoent - protokol dosyası kullanılarak yapılır

  • endpwent - passwd dosyası kullanılarak yapılır

  • endervent - hizmetler dosyası kullanılarak yapılır

  • eof - sonu için bir dosya tanıtıcısını test eder

  • eval - istisnaları yakalar veya kodu derleyip çalıştırır

  • exec - başka bir programı çalıştırmak için bu programı terk edin

  • var - bir karma anahtarın mevcut olup olmadığını test edin

  • çıkış - bu programı sonlandır

  • exp - yükseltme I bir güce

  • fcntl - dosya kontrol sistemi çağrısı

  • fileno - dosya tanıtıcısından dosya tanıtıcısını döndürür

  • flock - tüm dosyayı bir danışma kilidiyle kilitleyin

  • fork - aynen bunun gibi yeni bir süreç yarat

  • format - write () işlevi ile bir resim formatı beyan edin

  • formline - formatlar için kullanılan dahili işlev

  • getc - dosya tanıtıcısından sonraki karakteri alır

  • getgrent - sonraki grup kaydını al

  • getgrgid - grup kullanıcı kimliği verilen grup kaydını alır

  • getgrnam - grup adı verilen grup kaydını alır

  • gethostbyaddr - adresi verilen ana bilgisayar kaydını alır

  • gethostbyname - adı verilen ana bilgisayar kaydını alır

  • gethostent - sonraki ana bilgisayar kaydını al

  • getlogin - bu tty'ye giriş yapanları geri getirin

  • getnetbyaddr - adresi verilen ağ kaydını alır

  • getnetbyname - verilen adla ağ kaydını alır

  • getnetent - sonraki ağ kaydını al

  • getpeername - bir soket bağlantısının diğer ucunu bulun

  • getpgrp - süreç grubu al

  • getppid - üst süreç kimliğini alır

  • getpriority - mevcut güzel değeri alır

  • getprotobyname - adı verilen protokol kaydını alır

  • getprotobynumber - protokol kaydı sayısal protokolünü alır

  • getprotoent - sonraki protokol kaydını al

  • getpwent - sonraki passwd kaydını al

  • getpwnam - kullanıcı oturum açma adı verilen passwd kaydını alır

  • getpwuid - kullanıcı kimliği verilen passwd kaydını alır

  • getservbyname - adı verilen hizmet kaydını alır

  • getservbyport - sayısal bağlantı noktası verilen hizmet kaydını alır

  • getservent - sonraki hizmet kaydını al

  • getsockname - belirli bir soket için sockaddr'yi döndürür

  • getsockopt - belirli bir soket üzerindeki soket seçeneklerini alır

  • glob - dosya adlarını joker karakterler kullanarak genişletir

  • gmtime - UNIX saatini Greenwich saat biçimini kullanarak kayda veya dizeye dönüştürün.

  • goto - spagetti kodu oluştur

  • grep - bir listedeki öğeleri bulma, verilen bir kritere göre doğru testi yapma

  • hex - bir dizeyi onaltılık sayıya dönüştürür

  • içe aktar - bir modülün ad alanını kendi alanınıza yama

  • dizin - dizge içindeki bir alt dizeyi bulur

  • int - bir sayının tamsayı kısmını alır

  • ioctl - sisteme bağlı cihaz kontrol sistemi çağrısı

  • join - ayırıcı kullanarak bir listeyi bir dizeye birleştirin

  • anahtarlar - bir hash'den indislerin listesini alır

  • öldür - bir işleme veya süreç grubuna bir sinyal gönder

  • son - bir bloktan erken çık

  • lc - bir dizgenin küçük harfli versiyonunu döndürür

  • lcfirst - sadece sonraki harfi küçük olan bir dizge döndürür

  • uzunluk - bir dizedeki bayt sayısını döndürür

  • bağlantı - dosya sisteminde sabit bir bağlantı oluşturun

  • dinleyin - soketinizi sunucu olarak kaydedin

  • yerel - genel bir değişken için geçici bir değer oluşturun (dinamik kapsam)

  • localtime - yerel saati kullanarak UNIX saatini kayda veya dizgeye dönüştürün

  • kilit - bir değişken, alt yordam veya yöntem üzerinde iş parçacığı kilidi elde edin

  • log - bir sayı için doğal logaritmayı döndürür

  • lstat - sembolik bir bağlantı stat

  • m - bir dizeyi normal ifade modeliyle eşleştirir

  • harita - değişikliklerle yeni bir listeyi geri almak için listeye bir değişiklik uygulayın

  • mkdir - bir dizin oluşturur

  • msgctl - SysV IPC mesaj kontrol işlemleri

  • msgget - SysV IPC mesaj kuyruğunu alır

  • msgrcv - bir mesaj kuyruğundan bir SysV IPC mesajı alır

  • msgsnd - bir mesaj kuyruğuna bir SysV IPC mesajı gönder

  • my - yerel bir değişken bildir ve ata (sözcüksel kapsam)

  • sonraki - bir bloğu erken yineleyin

  • hayır - derleme zamanında bazı modül sembollerini veya anlamlarını geri alın

  • oct - bir dizeyi sekizlik sayıya dönüştürür

  • open - bir dosya, boru veya tanımlayıcı açın

  • opendir - bir dizin aç

  • ord - bir karakterin sayısal temsilini bulur

  • bizim - bir paket değişkeni bildirmek ve atamak (sözcüksel kapsam)

  • pack - bir listeyi ikili gösterime dönüştürür

  • paket - ayrı bir genel ad alanı bildirin

  • boru - bir çift bağlı dosya tanıtıcısı açın

  • pop - dizideki son öğeyi kaldırıp döndürür

  • konum - son / sonraki m // g araması için ofseti bulun veya ayarlayın

  • print - dosya tanıtıcısına bir liste çıktılar

  • printf - bir dosya tanıtıcısına biçimlendirilmiş bir liste çıktılar

  • prototip - bir alt programın prototipini (varsa) alın

  • push - bir diziye bir veya daha fazla öğe ekler

  • q - tek başına bir dizge alın

  • qq - bir dizgeyi çift tırnak içine alır

  • qr - Derleme kalıbı

  • quotemeta - düzenli ifade sihirli karakterlerden alıntı

  • qw - kelime listesinden alıntı yapar

  • qx - geri alıntı bir dizge alıntı yapar

  • rand - sonraki sözde rasgele sayıyı geri getir

  • okuma - bir dosya tanıtıcısından sabit uzunlukta arabelleğe alınmış girdi

  • readdir - bir dizin tanıtıcısından bir dizin alır

  • readline - bir dosyadan bir kayıt getir

  • readlink - sembolik bir bağlantının nereye işaret ettiğini belirleyin

  • okuma borusu - bir sistem komutu yürütün ve standart çıktı toplayın

  • recv - Soket üzerinden mesaj alır

  • yinele - bu döngü yinelemesini baştan başlatın

  • ref - başvurulan şeyin türünü bulun

  • yeniden adlandır - bir dosya adını değiştir

  • required - çalışma zamanında bir kitaplıktan harici işlevleri yükle

  • reset - verilen bir ismin tüm değişkenlerini temizler

  • dönüş - işlevden erken çıkın

  • ters - bir dizeyi veya listeyi çevir

  • rewinddir - dizin tutamacını sıfırlar

  • rindex - sağdan sola alt dize araması

  • rmdir - bir dizini kaldırır

  • s - bir kalıbı dizeyle değiştir

  • skaler - skaler bağlamı zorlar

  • arama - rasgele erişimli G / Ç için dosya işaretçisini yeniden konumlandırın

  • seekdir - dizin işaretçisini yeniden konumlandırır

  • seçin - varsayılan çıkışı sıfırlayın veya G / Ç çoğullama yapın

  • semctl - SysV semafor kontrol işlemleri

  • semget - SysV semaforlarının kümesini alır

  • semop - SysV semafor işlemleri

  • gönder - soket üzerinden mesaj gönder

  • setgrent - grup dosyasını kullanıma hazırlar

  • sethostent - ana bilgisayar dosyasını kullanım için hazırlar

  • setnetent - ağlar dosyasını kullanım için hazırlar

  • setpgrp - bir sürecin süreç grubunu ayarlar

  • setpriority - bir sürecin nezaket değerini belirler

  • setprotoent - protokol dosyasını kullanım için hazırlar

  • setpwent - passwd dosyasını kullanım için hazırlar

  • setservent - hizmet dosyasını kullanım için hazırlar

  • setsockopt - bazı soket seçeneklerini ayarlar

  • shift - bir dizinin ilk öğesini kaldırır ve onu döndürür

  • shmctl - SysV paylaşılan bellek işlemleri

  • shmget - SysV paylaşılan bellek bölümü tanımlayıcısını alır

  • shmread - SysV paylaşılan hafızasını oku

  • shmwrite - SysV paylaşılan hafızasını yaz

  • kapatma - soket bağlantısının yalnızca yarısını kapatın

  • günah - bir sayının sinüsünü döndürür

  • uyku - birkaç saniye engelle

  • soket - soket oluştur

  • socketpair - bir çift yuva oluşturun

  • sort - değerler listesini sıralar

  • splice - bir dizide herhangi bir yere eleman ekleyin veya kaldırın

  • split - normal ifade sınırlayıcı kullanarak bir dizeyi bölme

  • sprintf - bir dizgeye biçimlendirilmiş yazdırma

  • sqrt - karekök işlevi

  • srand - rastgele sayı üretecini tohumlama

  • stat - bir dosyanın durum bilgisini alır

  • çalışma - tekrarlanan aramalar için girdi verilerini optimize edin

  • alt - muhtemelen anonim olarak bir alt yordamı beyan edin

  • substr - bir karıştırmanın bir bölümünü alın veya değiştirin

  • sembolik bağ - bir dosyaya sembolik bir bağ oluşturun

  • syscall - keyfi bir sistem çağrısı yürütür

  • sysopen - bir dosya, boru veya tanımlayıcı açın

  • sysread - bir dosya tanıtıcısından sabit uzunlukta arabelleğe alınmamış girdi

  • sysseek - sysread ve syswrite ile kullanılan tutamaç üzerindeki G / Ç işaretçisini konumlandırma

  • sistem - ayrı bir program çalıştırın

  • syswrite - bir dosya tanıtıcısına sabit uzunlukta arabelleğe alınmamış çıktı

  • tell - bir dosya tanıtıcısı üzerinde mevcut arama işaretini alma

  • telldir - bir dizin tanıtıcısındaki mevcut arama işaretini bulur

  • tie - bir değişkeni bir nesne sınıfına bağlar

  • tied - bağlı bir değişkenin altında yatan nesneye bir referans alın

  • zaman - 1970'ten bu yana dönüş saniye sayısı

  • zamanlar - öz ve alt süreçler için geçen zamanı döndür

  • tr - bir dizenin transliterasyonu

  • kes - bir dosyayı kısalt

  • uc - bir dizenin büyük harf versiyonunu döndürür

  • ucfirst - sadece sonraki harfi büyük olan bir dizge döndürür

  • umask - dosya oluşturma modu maskesini ayarla

  • undef - bir değişkeni veya işlev tanımını kaldırır

  • bağlantıyı kaldır - bir dosyaya giden bir bağlantıyı kaldır

  • unpack - ikili yapıyı normal perl değişkenlerine dönüştürür

  • unshift - listenin başına daha fazla öğe ekler

  • çöz - bir değişkene bağlanmayı boz

  • kullanım - derleme zamanında bir modülde yükleme

  • utime - bir dosyanın son erişim ve değiştirme zamanlarını ayarlayın

  • değerler - hash'deki değerlerin bir listesini döndürür

  • vec - bir dizedeki belirli bitleri test edin veya ayarlayın

  • bekleyin - herhangi bir çocuk sürecin ölmesini bekleyin

  • waitpid - belirli bir çocuk sürecin ölmesini bekleyin

  • wantarray - geçerli altyordam çağrısının void vs skalar vs liste bağlamını alın

  • uyar - hata ayıklama bilgilerini yazdır

  • write - bir resim kaydı yazdırın

  • -X - bir dosya testi (-r, -x, vb.)

  • y - bir dizenin transliterasyonu