Tablica to zmienna przechowująca uporządkowaną listę wartości skalarnych. Zmienne tablicowe są poprzedzone znakiem „at” (@). Aby odnieść się do pojedynczego elementu tablicy, użyjesz znaku dolara ($) z nazwą zmiennej, po której nastąpi indeks elementu w nawiasach kwadratowych.
Oto prosty przykład użycia zmiennych tablicowych -
#!/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";
Tutaj użyliśmy znaku ucieczki (\) przed znakiem $, aby go wydrukować. Inne Perl zrozumie to jako zmienną i wypisze jej wartość. Po uruchomieniu da to następujący wynik -
$ages[0] = 25
$ages[1] = 30
$ages[2] = 40
$names[0] = John Paul
$names[1] = Lisa
$names[2] = Kumar
W Perlu terminy Lista i Tablica są często używane tak, jakby były zamienne. Ale lista to dane, a tablica to zmienna.
Tworzenie tablicy
Zmienne tablicowe są poprzedzone znakiem @ i zapełniane przy użyciu nawiasów lub operatora qw. Na przykład -
@array = (1, 2, 'Hello');
@array = qw/This is an array/;
W drugim wierszu używany jest operator qw //, który zwraca listę ciągów, oddzielając je rozdzielonymi białymi znakami. W tym przykładzie prowadzi to do tablicy czteroelementowej; pierwszy element to „to”, a ostatni (czwarty) to „tablica”. Oznacza to, że możesz używać różnych linii w następujący sposób -
@days = qw/Monday
Tuesday
...
Sunday/;
Możesz również wypełnić tablicę, przypisując każdą wartość indywidualnie w następujący sposób -
$array[0] = 'Monday';
...
$array[6] = 'Sunday';
Dostęp do elementów tablicy
Podczas uzyskiwania dostępu do poszczególnych elementów z tablicy, należy poprzedzić zmienną znakiem dolara ($), a następnie dołączyć indeks elementu w nawiasach kwadratowych po nazwie zmiennej. Na przykład -
#!/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";
To da następujący wynik -
Mon
Tue
Wed
Sun
Sun
Mon
Indeksy tablic zaczynają się od zera, więc aby uzyskać dostęp do pierwszego elementu, musisz podać 0 jako indeksy. Możesz również podać indeks ujemny, w którym to przypadku wybierasz element na końcu, a nie na początku tablicy. Oznacza to, co następuje -
print $days[-1]; # outputs Sun
print $days[-7]; # outputs Mon
Tablice liczb sekwencyjnych
Perl oferuje skrót do kolejnych cyfr i liter. Zamiast wpisywać każdy element na przykład podczas liczenia do 100, możemy zrobić coś takiego:
#!/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
Tutaj nazywana jest podwójna kropka (..) range operator. To da następujący wynik -
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
Rozmiar tablicy
Rozmiar tablicy można określić za pomocą kontekstu skalarnego tablicy - zwracana wartość będzie liczbą elementów w tablicy -
@array = (1,2,3);
print "Size: ",scalar @array,"\n";
Zwracana wartość zawsze będzie fizycznym rozmiarem tablicy, a nie liczbą prawidłowych elementów. Możesz to zademonstrować, a różnica między tablicą skalarną @array a tablicą $ #, używając tego fragmentu, jest następująca -
#!/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";
To da następujący wynik -
Size: 51
Max Index: 50
W tablicy zawierającej informacje są tylko cztery elementy, ale tablica ma długość 51 elementów i najwyższy indeks 50.
Dodawanie i usuwanie elementów w szyku
Perl udostępnia wiele przydatnych funkcji do dodawania i usuwania elementów w tablicy. Możesz mieć pytanie, co to jest funkcja? Do tej pory używałeśprintfunkcja drukowania różnych wartości. Podobnie istnieją różne inne funkcje lub czasami nazywane podprogramami, które można wykorzystać do różnych innych funkcji.
| Sr.No. |
Rodzaje i opis |
| 1 |
push @ARRAY, LIST Umieszcza wartości z listy na końcu tablicy. |
| 2 |
pop @ARRAY Zdejmuje i zwraca ostatnią wartość tablicy. |
| 3 |
shift @ARRAY Odsuwa pierwszą wartość tablicy i zwraca ją, skracając tablicę o 1 i przenosząc wszystko w dół. |
| 4 |
unshift @ARRAY, LIST Dołącza listę na początek tablicy i zwraca liczbę elementów w nowej tablicy. |
#!/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";
To da następujący wynik -
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
Wycinanie elementów tablicy
Możesz także wyodrębnić „wycinek” z tablicy - to znaczy możesz wybrać więcej niż jeden element z tablicy, aby utworzyć kolejną tablicę.
#!/usr/bin/perl
@days = qw/Mon Tue Wed Thu Fri Sat Sun/;
@weekdays = @days[3,4,5];
print "@weekdays\n";
To da następujący wynik -
Thu Fri Sat
Specyfikacja wycinka musi zawierać listę prawidłowych indeksów, dodatnich lub ujemnych, oddzielonych przecinkami. Aby uzyskać szybkość, możesz również użyć.. operator zakresu -
#!/usr/bin/perl
@days = qw/Mon Tue Wed Thu Fri Sat Sun/;
@weekdays = @days[3..5];
print "@weekdays\n";
To da następujący wynik -
Thu Fri Sat
Wymiana elementów tablicy
Teraz przedstawimy jeszcze jedną funkcję o nazwie splice(), który ma następującą składnię -
splice @ARRAY, OFFSET [ , LENGTH [ , LIST ] ]
Ta funkcja usunie elementy @ARRAY wyznaczone przez OFFSET i LENGTH i zastąpi je LISTĄ, jeśli została określona. Na koniec zwraca elementy usunięte z tablicy. Oto przykład -
#!/usr/bin/perl
@nums = (1..20);
print "Before - @nums\n";
splice(@nums, 5, 5, 21..25);
print "After - @nums\n";
To da następujący wynik -
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
Tutaj faktyczna zamiana zaczyna się od szóstej liczby, po czym pięć elementów jest następnie zastępowanych od 6 do 10 numerami 21, 22, 23, 24 i 25.
Przekształć ciągi w tablice
Przyjrzyjmy się jeszcze jednej funkcji o nazwie split(), który ma następującą składnię -
split [ PATTERN [ , EXPR [ , LIMIT ] ] ]
Ta funkcja dzieli ciąg na tablicę ciągów i zwraca ją. Jeśli określono LIMIT, dzieli się na co najwyżej tę liczbę pól. Jeśli pominięto WZORZEC, dzieli na białe znaki. Oto przykład -
#!/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
To da następujący wynik -
Roses
Michael
Przekształć tablice w ciągi
Możemy użyć join()funkcja, aby ponownie połączyć elementy tablicy i utworzyć jeden długi łańcuch skalarny. Ta funkcja ma następującą składnię -
join EXPR, LIST
Ta funkcja łączy oddzielne ciągi LISTA w jeden ciąg z polami oddzielonymi wartością WYRAŻ i zwraca ciąg. Oto przykład -
#!/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";
To da następujący wynik -
Rain-Drops-On-Roses-And-Whiskers-On-Kittens
Larry,David,Roger,Ken,Michael,Tom
Sortowanie tablic
Plik sort()funkcja sortuje każdy element tablicy zgodnie ze standardami numerycznymi ASCII. Ta funkcja ma następującą składnię -
sort [ SUBROUTINE ] LIST
Ta funkcja sortuje LISTĘ i zwraca posortowaną wartość tablicy. Jeśli określono SUBTROUTINE, podczas sortowania elementów stosowana jest logika podana wewnątrz SUBTROUTINE.
#!/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";
To da następujący wynik -
Before: pizza steak chicken burgers
After: burgers chicken pizza steak
Należy pamiętać, że sortowanie odbywa się na podstawie wartości liczbowych ASCII słów. Dlatego najlepszą opcją jest najpierw przekształcenie każdego elementu tablicy na małe litery, a następnie wykonanie funkcji sortowania.
Zmienna $ [Special Variable
Do tej pory widzieliście proste zmienne, które zdefiniowaliśmy w naszych programach i używaliśmy ich do przechowywania i drukowania wartości skalarnych i tablicowych. Perl udostępnia wiele specjalnych zmiennych, które mają swoje predefiniowane znaczenie.
Mamy specjalną zmienną, która jest zapisana jako $[. Ta specjalna zmienna jest skalarem zawierającym pierwszy indeks wszystkich tablic. Ponieważ tablice Perla mają indeksowanie od zera, $ [będzie prawie zawsze równe 0. Ale jeśli ustawisz $ [na 1, to wszystkie tablice będą używać indeksowania opartego na indeksie. Zaleca się, aby nie używać innego indeksowania niż zero. Jednak weźmy jeden przykład, aby pokazać użycie zmiennej $ [zmienna -
#!/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";
To da następujący wynik -
Foods: pizza steak chicken burgers
Food at @foods[1]: pizza
Food at @foods[2]: steak
Łączenie tablic
Ponieważ tablica to po prostu sekwencja wartości oddzielonych przecinkami, można je łączyć ze sobą, jak pokazano poniżej -
#!/usr/bin/perl
@numbers = (1,3,(4,5,6));
print "numbers = @numbers\n";
To da następujący wynik -
numbers = 1 3 4 5 6
Osadzone tablice po prostu stają się częścią głównej tablicy, jak pokazano poniżej -
#!/usr/bin/perl
@odd = (1,3,5);
@even = (2, 4, 6);
@numbers = (@odd, @even);
print "numbers = @numbers\n";
To da następujący wynik -
numbers = 1 3 5 2 4 6
Wybieranie elementów z list
Notacja listy jest identyczna jak dla tablic. Możesz wyodrębnić element z tablicy, dołączając nawiasy kwadratowe do listy i podając jeden lub więcej indeksów -
#!/usr/bin/perl
$var = (5,4,3,2,1)[4];
print "value of var = $var\n"
To da następujący wynik -
value of var = 1
Podobnie możemy wyodrębniać plasterki, chociaż bez konieczności stosowania wiodącego znaku @ -
#!/usr/bin/perl
@list = (5,4,3,2,1)[1..3];
print "Value of list = @list\n";
To da następujący wynik -
Value of list = 4 3 2