Perl - Diziler
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, List ve Array 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, ardışık 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, geçerli öğelerin sayısı değil, her zaman dizinin fiziksel boyutu olacaktır. 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ürerek diziyi 1 kısaltır ve her şeyi aşağı taşır. |
4 | unshift @ARRAY, LIST Listeyi dizinin önüne 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.. aralık 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 belirlenen öğ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 dizge dizisine böler ve onu döndürür. LIMIT belirtilirse, en fazla bu sayıda alana bölünür. PATTERN atlanırsa, boşlukta 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 uzun bir 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ıralanan 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.
$ [Özel Değişken
Şimdiye kadar programlarımızda tanımladığımız basit değişkeni gördünüz ve bunları skaler ve dizi değerlerini saklamak ve yazdırmak için kullandınız. Perl, önceden tanımlanmış anlamları olan çok sayıda özel değişken sağlar.
Şu şekilde yazılan özel bir değişkenimiz var $[. Bu özel değişken, tüm dizilerin ilk indeksini içeren bir skalerdir. Perl dizileri sıfır tabanlı indekslemeye sahip olduğu için, $ [neredeyse her zaman 0 olacaktır. Ancak $ ['ı 1 olarak ayarlarsanız, tüm dizileriniz temelli indekslemeyi kullanacaktır. Sıfır dışında herhangi bir indekslemenin kullanılmaması tavsiye edilir. Bununla birlikte, $ [değişken -
#!/usr/bin/perl
# define an array
@foods = qw(pizza steak chicken burgers);
print "Foods: @foods\n";
# Let's reset first index of all the arrays.
$[ = 1;
print "Food at \@foods[1]: $foods[1]\n";
print "Food at \@foods[2]: $foods[2]\n";
Bu, aşağıdaki sonucu verecektir -
Foods: pizza steak chicken burgers
Food at @foods[1]: pizza
Food at @foods[2]: steak
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 indis 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 duyulmasa 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