Provided by: manpages-pl_20060617-3_all bug

NAZWA

       perldata - typy danych Perla

OPIS

       Nazwy zmiennych

       Perl posiada trzy typy struktur danych: skalary, tablice skalarow oraz
       asocjacyjne tablice skalarow, zwane te "haszami" ("hashes").  Zwykle
       tablice indeksowane s liczbami, poczwszy od 0 (indeksy ujemne s liczone
       od koca tablicy). Tablice asocjacyjne indeksowane s lacuchami.

       Wartoci s zwykle przypisane do nazwy (lub nazwanego odwolania).
       Pierwszy znak nazwy mowi o tym, do jakiego rodzaju struktury danych si
       ona odnosi. Reszta nazwy okrela konkretn warto, do ktorej odnosi si
       nazwa.  Najczciej sklada si ona z pojedynczego identyfikatora, to
       znaczy, lacucha rozpoczynajcego si liter lub znakiem podkrelenia i
       zawierajcego litery, podkrelenia i cyfry. W niektorych przypadkach moe
       by cigiem identyfikatorow, rozdzielonych przez :: (lub przez ', ale nie
       jest to polecane). Wszystkie oprocz ostatniego interpretowane s jako
       nazwy pakietow, wskazujc przestrzenie nazw, w ktorych bdzie wyszukiwany
       ostatni identyfikator (szczegoly znajdziesz w sekcji Packages
       podrcznika perlmod(1)).  Moliwe jest zastpienie prostego identyfikatora
       wyraeniem, ktore w czasie wykonania tworzy odwolanie do wartoci; jest
       to opisane szczegolowo poniej oraz na stronie perlref(1) podrcznika.

       Istniej rownie zmienne specjalne, ktorych nazwy nie przestrzegaj
       powyszych regul, po to by nie kolidowaly przypadkowo z ktor z twych
       zwyklych zmiennych.  Lacuchy, ktore pasuj do objtych nawiasami okrglymi
       czci wyraenia regularnego zachowywane s pod nazwami zawierajcymi tylko
       cyfry po znaku $ (patrz strony perlop(1) i perlre(1) dokumentacji).
       Dodatkowo, kilka zmiennych specjalnych, umoliwiajcych dostp do
       wewntrznych rozwiza Perla, posiada nazwy zawierajce znaki przestankowe
       (zobacz strony perlvar(1) dokumentacji).

       Wartoci skalarne zawsze nosz nazwy rozpoczynajce si znakiem '$', nawet,
       gdy odnosz si do skalara bdcego czci tablicy. Dziala to podobnie jak
       angielski przedimek "the".  A zatem mamy:

           $dni             # zwykla warto skalarna "dni"
           $dni[28]         # 29-ty element tablicy
           $dni{'luty'}     # warto dla klucza 'luty' z hasza %dni
           $#dni            # ostatni indeks tablicy @dni

       ale cale tablice lub wycinki tablic oznaczane s przez '@', co dziala
       jak angielskie slowo "these" lub "those":

           @dni             # ($dni[0], $dni[1],... $dni[n])
           @dni[3,4,5]      # to samo, co @dni[3..5]
           @dni{'a','c'}    # to samo, co ($dni{'a'},$dni{'c'})

       za cale tablice asocjacyjne (hasze) oznaczane s przez '%':

           %dni             # (klucz1, warto1, klucz2, warto2 ...)

       Dodatkowo, procedury nazywane s z uyciem pocztkowego '&', cho jest to
       opcjonalne, jeli nie jest dwuznaczne (tak jak w jzyku angielskim czsto
       zbyteczne jest uycie slowa"do").  Elementy tablicy symboli mog by
       nazywane z uyciem pocztkowego '*', ale na razie nie musisz si tym
       zajmowa.

       Kady typ zmiennych ma swoj wlasn przestrze nazw. Moesz, bez obawy o
       konflikt, uywa tej samej nazwy dla zmiennej skalarnej, tablicy czy
       tablicy asocjacyjnej (lub uchwytu pliku, nazwy procedury czy etykiety).
       Oznacza to, e $foo i @foo s dwoma ronymi zmiennymi. Znaczy to te, e
       $foo[1] jest czci tablicy @foo, nie za czci skalara $foo. Moe si to
       wydawa troch dziwne, ale tak ma by, gdy to jest dziwne.

       Poniewa odniesienia do zmiennych i tablic zawsze rozpoczynaj si od '$',
       '@' lub '%', to slowa "zarezerwowane" nie s naprawd zarezerwowane w
       odniesieniu do nazw zmiennych.  (Jednak S one zarezerwowane w
       odniesieniu do etykiet i uchwytow plikow, ktore nie posiadaj
       specjalnego pocztkowego znaku. Nie moesz, na przyklad, uy uchwytu pliku
       o nazwie "log". Wskazowka: moesz napisa open(LOG,'logfile') zamiast
       open(log,'logfile').  Uycie nazw uchwytow plikow zloonych z duych liter
       poprawia rownie czytelno i chroni przed konfliktami z przyszlymi
       slowami zastrzeonymi.  Wielko liter JEST znaczca--"FOO", "Foo" oraz
       "foo" s zupelnie innymi nazwami. Nazwy rozpoczynajce si liter lub
       znakiem podkrelenia mog zawiera rownie cyfry i podkrelenia.

       Moliwe jest zastpienie takiej alfanumerycznej nazwy wyraeniem, ktore
       zwraca odwolanie do obiektu danego typu. Opis tego znajdziesz na
       stronie perlref(1) podrcznika.

       Nazwy rozpoczynajce si cyfr mog zawiera tylko cyfry. Nazwy, ktore nie
       zaczynaj si od litery, podkrelenia ani cyfry ograniczone s do
       pojedynczego znaku, np. $% czy $$. (Wikszo z tych jednoznakowych nazw
       ma predefiniowane znaczenie dla Perla. Na przyklad, $$ jest
       identyfikatorem biecego procesu.)

       Kontekst

       Interpretacja operacji i wartoci w Perlu zaley czasami od wymaga
       kontekstu, w jakim uyta jest operacja czy warto. Istniej dwa glowne
       konteksty: skalarny i listowy. Niektore z operacji zwracaj wartoci
       listowe w kontekcie oczekujcym listy, za wartoci skalarne w przeciwnym
       przypadku.  (Jeli tak jest dla danej operacji, to zostanie to
       wspomniane w jej opisie.)  Innymi slowy, Perl przecia pewne operacje w
       oparciu o to, czy spodziewana jest pojedyncza warto czy mnoga. (W
       podobny sposob funkcjonuj w jzyku angielskim niektore slowa, jak "fish"
       czy "sheep".)

       Na zasadzie wzajemnoci, operacja dostarcza albo kontekstu skalarnego
       albo listowego kademu ze swych argumentow. Na przyklad, jeli napiszesz

           int( <STDIN> )

       to operacja calkowita (integer) dostarcza kontekst skalarny dla
       operatora <STDIN>, ktory odpowiada czytajc jeden wiersz z STDIN i
       przesylajc go z powrotem do operacji integer. Ta z kolei znajduje warto
       typu integer tego wiersza i zwraca j. Jeeli, z drugiej strony,
       napiszesz

           sort( <STDIN> )

       To operacja sortowania dostarcza kontekstu listowego dla <STDIN>, ktory
       bdzie przetwarza wszystkie dostpne wiersze a do koca pliku.  Nastpnie
       przele list tych wierszy z powrotem do procedury sortowania, ktora z
       kolei posortuje dostarczone wiersze i zwroci je w postaci listy do
       kontekstu w jakim wywolano sort.

       Przypisanie jest troch specyficzne, w tym, i posluguje si swym lewym
       argumentem do ustalenia kontekstu dla prawego argumentu. Przypisanie do
       skalara oblicza praw stron w kontekcie skalarnym, podczas gdy
       przypisanie do tablicy lub wycinka tablicy rozwija praw stron w
       kontekcie listowym.  Przypisanie do listy rownie oblicza praw stron w
       kontekcie listowym.

       Procedury definiowane przez uytkownika mog sprawdza, czy s wywolane w
       kontekcie skalarnym czy listowym, ale wikszo z nich nie dba o to, gdy
       skalary s automatycznie interpolowane w listy. Zobacz opis funkcji
       wantarray na stronie perlfunc(1).

       Wartoci skalarne

       Wszystkie dane w Perlu s skalarami lub tablicami skalarow albo haszami
       skalarow. Zmienne skalarne mog zawiera rone rodzaje pojedynczych
       danych, jak liczby, lacuchy znakowe czy odwolania. Ogolnie, konwersja z
       jednej postaci na drug jest transparentna. (Skalar nie moe zawiera
       wielu wartoci, ale moe zawiera odwolanie do tablicy czy hasza
       zawierajcych wiele wartoci.)  Z powodu automatycznej konwersji
       skalarow, operatory i funkcje zwracajce skalary nie musz dba o to (i
       faktycznie nie dbaj), czy kontekst oczekuje lacucha czy te liczby.

       Skalary nie s koniecznie t czy inn rzecz. Nie ma moliwoci
       zadeklarowania zmiennej skalarnej o typie "string", "number", typu
       "filehandle", czy jakiego innego. Perl jest jzykiem kontekstowo
       polimorficznym, w ktorym skalary mog by lacuchami, liczbami czy
       odwolaniami (co obejmuje obiekty). Lacuchy i liczby uwaane s za
       mniejwicej to samo w niemal kadym zastosowaniu. Odwolania s jednak
       nierzutowalnymi wskanikami o cile okrelonym typie, z wbudowanym
       licznikiem odwola i wywolaniami destruktora.

       Warto skalarna interpretowana jest jako prawda, TRUE, w sensie logiki
       boolowskiej, jeli nie jest lacuchem pustym ani liczb zero (lub jej
       lacuchowym rownowanikiem, "0"). Kontekst boolowski (logiczny) jest po
       prostu specyficznym rodzajem kontekstu skalarnego.

       Faktycznie istniej dwie odmiany skalarow pustych: zdefiniowane i
       niezdefiniowane. Niezdefiniowane skalary puste zwracane s gdy brak jest
       rzeczywistej wartoci czego, jak w przypadku wystpienia bldu lub na kocu
       pliku, albo gdy odwolujesz si do niezdefiniowanej zmiennej czy elementu
       tablicy. Niezdefiniowany pusty skalar moe sta si zdefiniowany po tym,
       jak po raz pierwszy uyjesz go tak, jakby byl zdefiniowany. Ale przed
       tym moesz posluy si operatorem defined(), by stwierdzi, czy warto jest
       zdefiniowana czy te nie.

       By stwierdzi, czy dany lacuch jest poprawn liczb niezerow wystarczy
       zwykle porowna go zarowno z numerycznym 0 jak i leksykalnym  "0" (cho
       spowoduje to ostrzeenia opcji -w). Sposob ten wynika std, e lacuchy nie
       bdce liczbami uwaane s za 0, tak jak w awk:

           if ($str == 0 && $str ne "0")  {
               warn "To nie wyglda na liczb";
           }

       Zwykle jest to metoda preferowana, gdy w przeciwnym razie nie
       traktowalby poprawnie notacji IEEE, takich jak NaN czy Infinity.
       Czasami bdziesz wolal posluy si funkcj POSIX::strtod czy wyraeniem
       regularnym do sprawdzenia, czy dana jest numeryczna. Dokladny opis
       wyrae regularnych znajdziesz w podrczniku perlre.

           warn "has nondigits"        if     /\D/;
           warn "not a natural number" unless /^\d+$/;              # odrzuca -3
           warn "not an integer"       unless /^-?\d+$/;            # odrzuca +3
           warn "not an integer"       unless /^[+-]?\d+$/;
           warn "not a decimal number" unless /^-?\d+\.?\d*$/;    # odrzuca .2
           warn "not a decimal number" unless /^-?(?:\d+(?:\.\d*)?|\.\d+)$/;
           warn "not a C float"
               unless /^([+-]?)(?=\d|\.\d)\d*(\.\d*)?([Ee]([+-]?\d+))?$/;

       Dlugo tablicy jest wartoci skalarn. Moesz uzyska dlugo tablicy @dni
       obliczajc $#dni, tak jak w csh.  (Faktycznie, nie jest to dlugo
       tablicy, a indeks ostatniego elementu, gdy (zwykle) istnieje element o
       indeksie zerowym.) Przypisanie do $#dni zmienia dlugo tablicy.
       Skracanie t metod tablicy niszczy wartoci pozostale za nowym kocem
       tablicy. Wydluenie uprzednio skroconej tablicy JU NIE odtwarza wartoci,
       ktore byly w utraconych elementach. (Bylo tak w Perlu 4, ale musielimy
       z tym skoczy, by zapewni wywolywanie destruktorow tam, gdzie jest to
       oczekiwane.)  Moesz te osign nieco lepsz efektywno wstpnie poszerzajc
       tablic, ktora ma si powikszy. (Mona take poszerza tablic wykonujc
       przypisanie do elementu, ktory jest poza jej obecnym kocem.) Tablic
       mona obci do zera przez przypisanie do niej pustej listy (). Ponisze s
       rownowane:

           @cokolwiek = ();
           $#cokolwiek = -1;

       Jeeli przetwarzasz nazwan tablic w kontekcie skalarnym, to zwraca on
       dlugo tablicy. (Zauwa, e nie jest to prawd dla list, ktore zwracaj
       ostatni warto, tak jak operator przecinka w C. Nie jest to te prawd dla
       funkcji wbudowanych, zwracajcych to, na co maj ochot.)  Ponisze jest
       zawsze prawdziwe:

           scalar(@cokolwiek) == $#cokolwiek - $[ + 1;

       [Zmienna specjalna $[ okrela indeks pierwszego elementu w tablicy i
       pierwszego znaku w lacuchu, domylnie jest to zero.]  W wersji 5 Perla
       zmieniono semantyk $[: pliki nie ustawiajce wartoci $[ nie musz ju zwaa
       na to, czy inny plik zmienil jej warto.  Inaczej mowic, nie zaleca si
       uywania $[.  Zatem ogolnie moesz zaklada, e

           scalar(@cokolwiek) == $#cokolwiek + 1;

       Niektorzy programici wybieraj uycie jawnej konwersji, by nie bylo
       adnych wtpliwoci:

           $liczba_elementow = scalar(@cokolwiek);

       Jeeli poslugujesz si haszem (tablic asocjacyjn) w kontekcie skalarnym,
       to zwraca on warto, ktora jest prawd wtedy i tylko wtedy, gdy hasz
       zawiera jakkolwiek par klucz/warto. (Jeeli s takie pary, to warto
       zwracana jest lacuchem skladajcym si z liczby uytych jednostek komorek
       (buckets) oraz liczby zaalokowanych jednostek komorek, rozdzielonych
       ukonikiem.  Najbardziej przydaje si to do sprawdzania, czy wkompilowany
       w Perl algorytm haszowania dziala kiepsko na twoim zestawie danych. Na
       przyklad, wrzucasz 10,000 elementow do hasza, ale przetworzenie %HASH w
       kontekcie skalarnym zwraca "1/16", co oznacza, e tylko jedna z
       szesnastu komorek zostala uyta, i przypuszczalnie zawiera wszystkie
       twoje 10,000 pozycji. To si nie powinno zdarzy.)

       Moesz wstpnie przydzieli miejsce na hasz przy pomocy przypisania do
       funkcji keys(). Zaokrgli to zaalokowane jednostki komorek do najbliszej
       potgi dwojki.

           keys(%users) = 1000;                # zaalokuj 1024 buckets

       Konstruktory wartoci skalarnych

       Literaly numeryczne podawane s w zwyczajowych formatach
       zmiennoprzecinkowych lub calkowitych:

           12345
           12345.67
           .23E-10
           0xffff           # hex
           0377             # osemkowa
           4_294_967_296    # podkrelenie dla lepszej czytelnoci

       Literaly lacuchowe ograniczone s zwykle przez pojedyncze lub podwojne
       cudzyslowy. Dzialaj one bardzo podobnie do znakow cytowania powloki: w
       literalach lacuchowych w cudzyslowach zachodzi zastpowanie zmiennych i
       interpretacja odwrotnego ukonika. W lacuchach w apostrofach nie
       wystpuje zastpowanie i interpretacja (z wyjtkiem "\'" oraz "\\"). To
       tworzenia znakow takich jak nowa linia, tabulator itd., stosowane s
       zarowno zwykle reguly uycia odwrotnego ukonika w Unixie, jak i bardziej
       egzotyczne formy. List sposobow cytowania znajdziesz w sekcji Quote and
       Quotelike Operators podrcznika perlop(1).

       Zapisy osemkowe czy szesnastkowe w literalach lacuchowych (np.
       '0xffff') nie s automatycznie zamieniane na ich calkowit reprezentacj.
       Konwersje te wykonuj funkcje hex() i oct(). Wicej szczegolow znajdziesz
       w opisach tych funkcji w podrczniku perlfunc(1).

       Moesz te umieszcza znaki nowej linii bezporednio w lacuchach, tj., mog
       one koczy si w innym wierszu ni si rozpoczly. Jest to przyjemne, ale
       jeeli zapomnisz zamykajcego cudzyslowu, to bld nie bdzie zglaszany
       dopoty, dopoki Perl nie znajdzie innego wiersza, zawierajcego znak
       cudzyslowu, ktory moe znajdowa si o wiele dalej w skrypcie. Zastpowanie
       zmiennych w lacuchach ograniczone jest do zmiennych skalarnych, tablic
       oraz wycinkow tablic. (Inaczej mowic, nazw rozpoczynajcych si od $ lub
       @, po ktorych moe opcjonalnie wystpi, ujte w nawiasy kwadratowe,
       wyraenie traktowane jako indeks elementu tablicy.)  Poniszy fragment
       kodu drukuje "Cena wynosi $100."

           $cena = '$100';    # nie interpretowane
           print "Cena wynosi $cena.\n";     # interpretowane

       Tak jak w niektorych powlokach, moesz umieci nazw w nawiasach
       klamrowych, by oddzieli j od nastpujcych dalej znakow alfanumerycznych.
       Identyfikator w takich nawiasach traktowany jest zawsze jako lacuch,
       tak samo jak pojedynczy identyfikator bdcy indeksem hasza. Nasz
       wczeniejszy przyklad,

           $dni{'luty'}

       moe by zapisany jako

           $dni{luty}

       a cudzyslowy bd domniemane automatycznie. Ale cokolwiek bardziej
       skomplikowanego w indeksie zostanie zinterpretowane jako wyraenie.

       Zauwa, e lacuch w pojedynczych cudzyslowach musi by oddzielony od
       poprzedzajcego go slowa odstpem, gdy pojedynczy cudzyslow jest
       poprawnym (cho nie zalecanym) znakiem w nazwie zmiennej (zobacz
       Packages w podrczniku perlmod(1)).

       Trzema specjalnymi literalami s __FILE__, __LINE__ oraz __PACKAGE__,
       ktore reprezentuj nazw biecego pliku, numer wiersza oraz nazw pakietu w
       danym punkcie twego programu. Mog by uywane wylcznie jako odrbne
       tokeny. Nie bd one interpolowane wewntrz lacuchow.  Jeeli nie ma
       biecego pakietu (z powodu pustej dyrektywy package;), to __PACKAGE__
       jest wartoci niezdefiniowan.

       Tokenami __END__ i __DATA__ mona poslugiwa si do wskazania logicznego
       koca skryptu przed faktycznym kocem pliku. Dowolny nastpujcy po nich
       tekst jest ignorowany, ale moe by odczytany przy pomocy uchwytu DATA.
       Wykorzystaj main::DATA dla uytego tokenu __END__, lub te
       NAZWAPAKIETU::DATA (gdzie NAZWAPAKIETU jest biecym pakietem) dla
       __DATA__.  Dwa znaki sterujce: ^D i ^Z s synonimami dla __END__ (lub
       __DATA__ w module). Szerszy opis __DATA__ i przyklad uycia znajdziesz w
       podrczniku SelfLoader.  Zauwa, e nie mona czyta z uchwytu pliku DATA w
       bloku BEGIN.  Blok ten jest wykonywany natychmiast po napotkaniu (w
       czasie kompilacji).  W tym momencie nie zostal jeszcze znaleziony
       odpowiedni token __DATA__ (lub __END__).

       Slowo nie posiadajce adnej innej interpretacji w gramatyce Perla bdzie
       traktowane tak, jakby znajdowalo si w cudzyslowie. S one znane pod nazw
       "golych slow" ("barewords").  Tak samo, jak w przypadku etykiet i
       uchwytow plikow, gole slowa skladajce si wylcznie z malych liter naraaj
       na konlikt z przyszlymi slowami zastrzeonymi.  Jeeli uyjesz przelcznika
       -w, to Perl bdzie ostrzegal o wystpieniu takich slow.  Niektorzy
       chcieliby calkowicie wyj spod prawa gole slowa.  Jeli napiszesz

           use strict 'subs';

       to kade gole slowo, ktore nie zostanie zinterpretowane jako wywolanie
       procedury spowoduje bld kompilacji. Ograniczenie to rozciga si do koca
       zawierajcego je bloku. Blok wewntrzny moe je jednak zanegowa przy
       pomocy no strict 'subs'.

       Zmienne tablicowe w lacuchach objtych cudzyslowami interpolowane s
       przez zlczenie wszystkich elementow tablicy. Elementy s wowczas
       rozdzielone ogranicznikiem podanym w zmiennej $" ($LIST_SEPARATOR w
       module English), domylnie spacj. Ponisze fragmenty s rownowane:

           $temp = join($",@ARGV);
           system "echo $temp";

           system "echo @ARGV";

       Wewntrz wzorcow wyszukiwania (ktore rownie podlegaj zastpowaniu w
       podwojnym cytowaniu) pojawia si brzydka niejednoznaczno: czy
       /$foo[bar]/ ma by interpretowane jako /${foo}[bar]/ (gdzie [bar] jest
       klas znakow wyraenia regularnego) czy te jako /${foo[bar]}/ (gdzie
       [bar] jest indeksem tablicy @foo)? Jeeli nie istnieje @foo, to jest to
       oczywicie klasa znakow. Jeeli @foo istnieje, to Perl odgaduje czym ma
       by [bar], i prawie zawsze ma racj.  Jeli odgaduje le, albo po prostu
       jeste paranoikiem, moesz wymusi poprawn interpretacj uywajc nawiasow
       klamrowych jak powyej.

       Wierszowa forma cytowania oparta jest na skladni "dokumentow-tutaj"
       uywanej ("here-doc") w powlokach. Po sekwencji << podajesz napis
       ograniczajcy cytowany material, a wszystkie wiersze poniej biecego a do
       napisu koczcego s wartoci elementu. Napisem koczcym moe by
       identyfikator (slowo) albo jaki cytowany tekst. Jeeli jest to tekst
       cytowany, to rodzaj zastosowanych znakow cytowania okrela traktowanie
       tekstu, tak jak przy zwyklym cytowaniu. Niecytowany identyfikator
       dziala tak, jakby byl w podwojnym cudzyslowie. Pomidzy << a
       identyfikatorem nie moe wystpi spacja. (Jeeli wstawisz spacj, to bdzie
       ona traktowany jak pusty identyfikator, co jest poprawne i dopasowuje
       pierwszy pusty wiersz.) Napis koczcy musi pojawi si w wierszu koczcym
       samotnie (niecytowany i bez otaczajcych bialych znakow).

               print <<EOF;
           Cena wynosi $cena.
           EOF

               print <<"EOF";  # to samo, co powyej
           Cena wynosi $cena.
           EOF

               print <<`EOC`;  # wykonaj polecenia
           echo hi there
           echo lo there
           EOC

               print <<"foo", <<"bar"; # moesz skladowa, jeden za drugim
           I said foo.
           foo
           I said bar.
           bar

               myfunc(<<"TO", 23, <<'TAMTO');
           Masz tu linijk
           czy dwie.
           TO
           a tu jeszcze jedn.
           TAMTO

       Nie zapomnij tylko, e musisz postawi rednik na kocu instrukcji.  Perl
       nie wie przecie, czy nie zamierzasz sprobowa zrobi tego:

               print <<ABC
           179231
           ABC
               + 20;

       Konstruktory wartoci listowych

       Wartoci listowe oznaczane s przez oddzielenie pojedynczych wartoci
       przecinkami (i otoczenie listy nawiasami jeli wymaga tego kolejno):

           (LIST)

       W kontekcie nie wymagajcym wartoci listowej warto literalu listowego
       jest wartoci ostatniego elementu, tak jak w przypadku wystpujcego w C
       operatora przecinkowego.  Na przyklad,

           @foo = ('cc', '-E', $bar);

       przypisuje warto calej listy do tablicy foo, ale

           $foo = ('cc', '-E', $bar);

       przypisuje zmiennej foo warto zmiennej bar. Zauwa, e rzeczywista
       tablica w kontekcie skalarnym zwraca dlugo tablicy. Poniszy kod
       przypisuje $foo warto 3:

           @foo = ('cc', '-E', $bar);
           $foo = @foo;                # $foo dostaje 3

       Przed nawiasem zamykajcym list literalow moesz uy opcjonalnego
       przecinka, zatem moesz pisa:

           @foo = (
               1,
               2,
               3,
           );

       LISTY dokonuj automatycznej interpolacji podlist. To znaczy, kiedy
       przetwarzana jest LISTA, to kady jej element jest przetwarzany w
       kontekcie listowym. Wynikowa warto listy interpolowana jest do listy
       LISTA tak, jakby kady pojedynczy element byl czlonkiem LISTY Zatem w
       LICIE trac swoj tosamo tablice i hasze--lista

           (@foo,@bar,&SomeSub,%glarch)

       zawiera wszystkie elementy @foo, po ktorych nastpuj wszystkie elementy
       @bar, wszystkie elementy zwrocone przez procedur o nazwie SomeSub
       wywolan w kontekcie listowym, i na kocu pary klucz/warto z %glarch.
       Jeeli chcesz odwola si do listy, NIE wykonujc interpolacji zajrzyj do
       podrcznika perlref(1).

       Lista pusta reprezentowana jest przez (). Jej interpolowanie w licie
       nie daje adnego efektu. Zatem ((),(),()) jest rownowane (). Podobnie,
       interpolowanie tablicy bez elementow jest tym samym, co nie
       interpolowanie w tym miejscu adnej tablicy.

       Warto listowa moe by te indeksowana tak, jak zwykla tablica. Musisz
       tylko umieci list w nawiasach, by unikn niejasnoci. Na przyklad:

           # Stat zwraca warto listow
           $time = (stat($file))[8];

           # TUTAJ BLD SKLADNI
           $time = stat($file)[8];  # Oj, zapomnialem nawiasow

           # znajd cyfr szesnastkow
           $hexdigit = ('a','b','c','d','e','f')[$digit-10];

           # "reverse comma operator"
           return (pop(@foo),pop(@foo))[0];

       W licie moesz wykona przypisanie do undef. Przydaje si to do pozbywania
       si niektorych wartoci zwracanych przez funkcj:

           ($dev, $ino, undef, undef, $uid, $gid) = stat($file);

       Do list mona wykona przypisanie wtedy i tylko wtedy, gdy dozwolone jest
       przypisanie do kadego z elementow listy:

           ($a, $b, $c) = (1, 2, 3);

           ($map{'czerwony'}, $map{'niebieski'}, $map{'zielony'})
                                                     = (0x00f, 0x0f0, 0xf00);

       Przypisanie tablicy w kontekcie skalarnym zwraca liczb elementow
       utworzonych przez wyraenie po prawej stronie przypisania:

           $x = (($foo,$bar) = (3,2,1));  # ustaw $x na 3, nie 2
           $x = (($foo,$bar) = f()); # ustaw $x na ilo zwroconych przez f()

       Jest to bardzo wygodne, gdy chcesz wykona przypisanie listy w kontekcie
       logicznym (boolowskim), gdy wikszo funkcji listowych zwraca po
       zakoczeniu przetwarzania list pust, co przy przypisaniu daje 0,
       interpretowane jako falsz.

       Ostatni element moe by tablic lub haszem:

           ($a, $b, @rest) = split;
           my($a, $b, %rest) = @_;

       Faktycznie moesz umieci tablic lub hasza w dowolnym miejscu listy, ale
       pierwsze z nich na licie wessie wszystkie wartoci i pozostale dostan
       warto nul. Moe to by pomocne w local() lub my().

       Literal hasza (tablicy asocjacyjnej) zawiera pary wartoci, ktore bd
       interpretowane jako klucz i warto:

           # takie samo przypisanie jak powyej
           %map = ('czerwony',0x00f,'niebieski',0x0f0,'zielony',0xf00);

       Cho listy literalow i nazwane tablice s zwykle wzajemnie wymienne, to
       nie zachodzi to w przypadku haszy. To, e moesz indeksowa wartoci listy
       tak jak zwyklej tablicy nie oznacza, e moesz indeksowa list tak jak
       hasz.  Podobnie, hasze wlczone jako czci innych list (lcznie z listami
       parametrow i list zwracanych przez funkcje) zawsze ulegaj splaszczeniu
       do par klucz/warto. Dlatego czasem dobrze jest uy wskazania.

       Czsto bardziej czytelne jest uycie pomidzy parami klucz/warto operatora
       =>. Operator ten jest po prostu bardziej wyroniajcym si wzrokowo
       synonimem przecinka. Ponadto powoduje, e jego lewostronny operand jest
       interpretowany jako lacuch, jeli jest on golym slowem, ktore mogloby by
       poprawnym identyfikatorem.  Uprzyjemnia to inicjowanie haszy:

           %map = (
                        czerwony  => 0x00f,
                        niebieski => 0x0f0,
                        zielony   => 0xf00,
          );

       lub inicjowanie odwola do haszy, ktore bd uywane jako rekordy:

           $rec = {
                       witch => 'Mable the Merciless',
                       cat   => 'Fluffy the Ferocious',
                       date  => '10/31/1776',
           };

       albo uycie wywolywanych przez nazw parametrow skomplikowanej funkcji:

          $field = $query->radio_group(
                      name      => 'group_name',
                      values    => ['eenie','meenie','minie'],
                      default   => 'meenie',
                      linebreak => 'true',
                      labels    => \%labels
          );

       Zwro uwag na to, i fakt, e tablica asocjacyjna jest zainicjowana w
       takim porzdku, nie oznacza, e zostanie zwrocona w tym samym porzdku.
       Przyklady, jak uloy kolejno zwracanych wynikow znajdziesz przy opisie
       sort w podrczniku perlfunc(1).

       Typeglob i uchwyty plik'o'ow

       Perl posluguje si wewntrznym typem zwanym typeglob. Przechowuje w nim
       wszystkie zapisy tablicy symboli. Przedrostkiem typu typeglob jest *,
       gdy reprezentuje on wszystkie typy. Byl on zalecanym sposobem
       przekazywania tablic i tablic asocjacyjnych przez odwolanie do funkcji,
       ale obecnie istniej prawdziwe odwolania, wic jest to rzadko potrzebne.

       Podstawowym zastosowaniem typeglob we wspolczesnym Perlu jest tworzenie
       synonimow tablicy symboli. To przypisanie:

           *cos = *inne;

       robi $cos synonimem (aliasem) dla $inne, @cos jest aliasem dla @inne,
       %cos aliasem dla %inne, &cos aliasem dla &inne, itd. Duo bezpieczniej
       jest uy odwolania (wskazania).  To:

           local *Tutaj::niebieski = \$Tam::zielony;

       tymczasowo czyni $Tutaj::niebieski aliasem dla $Tam::zielony, ale nie
       robi @Tutaj::niebieski aliasem dla @Tam::zielony, czy %Tutaj::niebieski
       aliasem dla %Tam::zielony, itd.  W sekcji Symbol Tables podrcznika
       perlmod(1) znajdziesz wicej takich przykladow. Mimo, e moe to wyglda
       dziwnie, jest to podstaw calego systemu importu/exportu modulow.

       Innym zastosowaniem typeglob jest przesylanie uchwytow plikow do
       funkcji lub tworzenie nowych uchwytow. Jeeli potrzebujesz posluy si
       typeglob, by zachowa uchwyt pliku, zrob to tak:

           $fh = *STDOUT;

       albo moe jako prawdziwe odwolanie, jak to:

           $fh = \*STDOUT;

       W podrczniku perlsub(1) znajdziesz przyklady zastosowania typeglob jako
       porednich uchwytow plikow w funkcjach.

       Typeglob s rownie sposobem na tworzenie lokalnych uchwytow plikow przy
       uyciu operatora local(). Istniej wowczas a do wyjcia z ich bloku, ale
       mog by przeslane powtornie.  Na przyklad:

           sub newopen {
               my $path = shift;
               local *FH;  # nie my!
               open   (FH, $path)          or  return undef;
               return *FH;
           }
           $fh = newopen('/etc/passwd');

       Obecnie, gdy dysponujemy notacj *foo{CO}, typeglob nie s tak czsto
       uywane do manipulowania uchwytami plikow, chocia wci s konieczne do
       przeslania calkiem nowego uchwytu pliku czy katalogu do funkcji czy z
       funkcji.  Wynika to std, e *UCHWYT{IO} dziala tylko jeli UCHWYT byl ju
       uyty jako uchwyt. Inaczej mowic, do tworzenia nowych wpisow w tablicy
       symboli moe posluy *FH, ale nie *foo{CO}.

       Inn metod tworzenia anonimowych uchwytow plikow jest wykorzystanie
       modulu IO::Handle.  Zalet tych modulow jest nieukrywanie ronych typow
       tej samej nazwy podczas local(). Na kocu opisu open() w podrczniku
       perlfunc(1) zamieszczono odpowiedni przyklad.

       Dalsze rozwaania na temat typeglob i skladni *foo{THING} znajdziesz w
       podrcznikach perlref(1) i perlsub(1), a take w sekcji Symbol Tables
       podrcznika perlmod(1).

INFORMACJE O T/L/LUMACZENIU

       Powysze tlumaczenie pochodzi z nieistniejcego ju Projektu Tlumaczenia
       Manuali i moe nie by aktualne. W razie zauwaenia ronic midzy powyszym
       opisem a rzeczywistym zachowaniem opisywanego programu lub funkcji,
       prosimy o zapoznanie si z oryginaln (angielsk) wersj strony podrcznika.