Perl/Tablice: Różnice pomiędzy wersjami

Usunięta treść Dodana treść
Derbeth (dyskusja | edycje)
m nawigacja, link fix
Warszk (dyskusja | edycje)
mNie podano opisu zmian
Linia 10:
print "The values are: ", $length, $width, $depth, "\n";
 
 
{| WIDTH="75%" | style="background-color: #f2fff2; border: solid 1px #bfffbf; padding: 1em;" valign=top|
Linia 20 ⟶ 19:
Podczas tworzenia listy z kilkoma łańcuchami znaków bez spacji, Perl dostarcza skrót, który pomija wstawianie przecinków i kropek. Zamiast
($name1, $name2, $name3, $name4) = ('Paul', 'Michael', 'Jessica', 'Megan');
Możesz użyć operatora <tt>qw//</tt>. Operator ten używa niealfanumerycznych znaków jako ogranicznik (zazwyczaj znaku <tt>/</tt> ) i ogranicza spacjami kolejne elementy. Ogranicznik oddziela polecenie od argumentów. Poniższa linia oznacza to samo, co powyższa:
($name1, $name2, $name3, $name4) = qw/Paul Michael Jessica Megan/;
 
Linia 27 ⟶ 26:
($name1, $name2, $name3, $name4) = qw(Paul Michael Jessica Megan);
 
OstatecznyOstatni przykład używa otwierającego i zamykającego nawiasu, jako różny ogranicznik. Jeśli jest wersja otwierająca i zamykająca ogrnicznik, musisz użyć obydwu. W przeciwnym przypadku powtarzasz go dwa razy np. nie możesz napisać <tt>qw<Paul Michael<</tt>, musisz napisać to tak <tt>qw<Paul Michael><tt>.
{| WIDTH="75%" | style="background-color: #f2fff2; border: solid 1px #bfffbf; padding: 1em;" valign=top|
|'''Uwaga'''</br>''Wynik używania operatora <tt>qw//</tt> jest podobny, jak pojedyńczego cudzysłowia tzn. łańcuch znaków nie jest interpolowany. Jeśli potrzebujesz dołączyć zmienną w twojej liście, nie możesz używać tej metody.''
Linia 34 ⟶ 33:
===Przypisywanie za pomocą list===
 
Jak już zobaczyliśmy, listy mogą być używanaużywane do tworzenietworzenia wielu przypisań za jednym razem. Jeśli liczba zmienny po lewej stronie jest taka sama, jak po prawej, do wszystkich zmiennych jest przypisywana odpowiednia wartość, jak zresztą oczekiwaliśmy.
 
Jeśli mamy miejmniej zmiennej po lewej, niż po prawej, dodatkowa wartość jest po prostu ignorowana:
 
#!/usr/bin/perl
($length, $width) = (10, $w, 15); #$length ma 10, $width ma wartość taką samą jak $w. 15 jest pominięta
 
 
Jeśli mamy więcej zmiennych po lewej, niż po prawej, dodatkowa wartość będzie posiadała domyślną wartość <tt>undef</tt>:
Linia 47 ⟶ 45:
#!/usr/bin/perl
($length, $width, $depth) = (10, $w); #$length ma 10, $width ma wartość taką samą jak $w. $depth wynosi undef
Przypisywanie poprzez listy umożliwia nam w łatwy sposób zamianę wartości dwóch zmiennych (swap), bez potrzeby tworzenia dodatkowej, tymczasowej wartości:
Linia 61 ⟶ 59:
==Tablice==
 
Tablica w Perlu, jest zmienną przechowywującą listę. Tablica może być modyfikowana, może dodawać elementy i je usuwać, opróżniać, ponownie przypisanie do całkowicie różnych list. Podobnie, jak wszystkie zmienne skalarne rozpoczynają się od znaku <tt>$</tt>, wszystkie tablice rozpoczynają się od znaku <tt>@</tt>.
 
{| WIDTH="75%" | style="background-color: #f2fff2; border: solid 1px #bfffbf; padding: 1em;" valign=top|
|'''Uwaga'''</br>
''Używanie nazwy 'lista' i 'tablica' zamiennie jest powrzechnympowszechnym błędem. Jednak tak nie jest. </br> Lista (np. <tt>qw/foo bar baz/</tt>) ma to do tablicy (jak np. <tt>@values</tt>), co ma łańcuch znaków (np. <tt>'Paul'</tt>) do zmiennej skalarnej (jak np. <tt>$name</tt>).''
|}
 
 
===Przypisywanie tablicy===
Linia 85 ⟶ 82:
@all = @nums, @more; #@all przechowuje wszystkie liczby od 1 do 1000
 
Ostatni przykład pokazuje cechę perla znaną jako 'array flattening' (płaszczenie tablicy). Kiedy tablica jest używana w liście, tablica ta zapełnia listę '''elementami''' znajdującymi się w niej, a nie tworzy tablicę w tablicy. Jak wspomnieliśmy wcześniej, lista jest zbiorem tylko '''zmiennych skalarnych'''. Tak więc tablica <tt>@all</tt> przechowuje 1000 elementów, a nie 2.
 
Ostatni przykład pokazuje cechę perla znaną jako 'array flattening' (płaszczenie tablicy). Kiedy tablica jest używana w liście, tablica ta zapełnia listę '''elementami''' znajdującymi się w niej, a nie tworzy tablicę w tablicy. Jak wspomnieliśmy wcześniej, lista jest zbiorem tylko '''zmiennych skalarnych'''. Tak więc tablica <tt>@all</tt> przechowuje 1000 elementów, a nie 2.
 
{| WIDTH="75%" | style="background-color: #f2fff2; border: solid 1px #bfffbf; padding: 1em;" valign=top|
Linia 107 ⟶ 103:
 
{| WIDTH="75%" | style="background-color: #f2fff2; border: solid 1px #bfffbf; padding: 1em;" valign=top|
|'''Uwaga'''</br>''Powszechnym poglądem jest, że '''lista''' w kontekście skalara także zwraca swoją wielkość. Nie jest to prawdą. W rzeczywistości, kiedy użwasz operatora przecinek w kontekście zmiennej skalarnej nie tworzysz listy, lecz uwzględnia kadykażdy argument od lewej do prawej i zwraca ostatni:''<br><br>
$name = qw/Paul Michael Jessica Megan/;
print "The last name in my list is $name\n";
Linia 120 ⟶ 116:
print "My names are: @names.\n";</tt>
 
W pierwszypierwszym przykładzie funkcja <tt>print</tt> bierze listę z 6 argumentami: napis 'My names are: ', każdy z czterech wartości w <tt>@names</tt> i tekst ".\n". Każdy argument jest podczas wyświetlania oddzielony od siebie wartością zawartą w zmiennej <tt>$,</tt> (domyślna wartość jest pustym tekstem), w tym przykladzieprzykładzie wartości znajdujące się w tablicy zostaną 'zmiażdżone' razem:
My names are: PaulMichaelJessicaMegan.
 
Linia 146 ⟶ 142:
print @array[0]; # Także pokaże 1, ale jest to niepoprawne<br>
 
W rzeczywistości <code>@array[0]</code> jest <i>kawałkiem</i> tablicy (czyli pod-tablicatablicą w tablicy), który przechowuje jeden element. Natomiast <code>$array[0]</code> zmienną skalarną, która przechowuje wartość 1.
 
===Powszechne funkcje na tablicach===
 
== RelatedPokrewne Articlesartykuły ==
 
* [[Programming:Perl Function reference#List functions|Perl:List Functions]]