Provided by: manpages-pl_0.7-1_all bug

NAZWA

       perlfunc - Wbudowane funkcje perla

OPIS

        Uwaga! To tłumaczenie może być nieaktualne!

       Funkcje z tej sekcji mogą służyć pomocą w wyrażeniach. Podpadają one pod dwie główne kategorie: operatory
       list, oraz nazwane operatory jednoargumentowe. [Przyp. tłum.: w perlu nie ma prawdziwych funkcji, są
       operatory] Różnią się one w związku priorytetowym przecinkiem.  (zobacz tablicę priorytetów na stronie
       perlop(1).). Operatory list pobierają więcej niż jeden argument, podczas gdy operatory jednoargumentowe,
       z definicji, nigdy nie biorą więcej niż jeden argument. Tak więc przecinek kończy argument operatora
       jednoargumentowego, lecz jedynie rozdziela argumenty operatora listy. Ogólnie, operator jednoargumentowy
       daje swojemu argumentowi kontekst skalarny, podczas gdy operator listowy może dawać zarówno kontekst
       skalarny, jak i listowy. Jeśli daje obydwa, to argumenty skalarne będą najpierw, a za nimi nastąpią
       argumenty listowe. (Zauważ, że może istnieć tylko jeden argument listowy.) Np. funkcja splice() ma trzy
       argumenty skalarne, za którymi następuje lista.

       W opisach składni, które są niżej, operatory list, które oczekują listy (i dają kontekst listowy
       elementom tej listy) są pokazywane z argumentem LISTA.  Lista taka może składać się z dowolnej kombinacji
       argumentów skalarnych lub wartości listowych; wartości listowe będą włączone w listę tak, jakby każdy
       pojedynczy element był interpolowany w tym punkcie listy, tworząc dłuższą, jednowymiarową wartość
       listową. Elementy typu LISTA powinny być oddzielone przecinkami.

       Każda funkcja z poniższej listy, może być użyta bez, albo z nawiasami wokół swoich argumentów. (Opisy
       składni pomijają nawiasy.) Jeśli używasz nawiasów, to prosta (lecz czasem zaskakująca) reguła jest taka:
       WYGLĄDA jak funkcja, więc JEST funkcją i priorytet nie ma znaczenia. W przeciwnym wypadku jest to
       operator listowy lub operator jednoargumentowy i priorytet się liczy. I biała spacja między funkcją i
       lewym nawiasem nie liczy się--więc musisz być czasem ostrożny:

           print 1+2+4;        # Drukuje 7.
           print(1+2) + 4;     # Drukuje 3.
           print (1+2)+4;      # Też drukuje 3!
           print +(1+2)+4;     # Drukuje 7.
           print ((1+2)+4);    # Drukuje 7.

       Jeśli uruchamiasz perla z przełącznikiem -w, to będziesz o tym ostrzegany. Na przykład trzecia z
       powyższych linii daje w efekcie:

           print (...) interpreted as function at - line 1.
           Useless use of integer addition in void context at - line 1.

       Dla instrukcji, które mogą być używane zarówno w kontekstach skalarnych, jak i listowych, błąd nie
       wymagający przerwania jest ogólnie wskazywany w kontekście skalarnym przez zwrot niezdefiniowanej
       wartości, a w kontekście listowym przez zwrot listy null.

       Zapamiętaj następującą regułę:

       NIE ISTNIEJE OGÓLNA REGUŁA KONWERSJI LISTY W SKALAR!

       Każdy  operator  i  funkcja  decyduje,  jaki  rodzaj  wartości jest najbardziej odpowiedni do zwrócenia w
       kontekście skalarnym. Niektóre operatory zwracają długość  listy,  która  byłaby  zwrócona  w  kontekście
       listowym.  Niektóre  zwracają  pierwszą  wartość  listy.  Niektóre zwracają ostatnią wartość listy.  Inne
       zwracają liczbę pomyślnych operacji. Ogólnie, robią one to, czego chcesz, chyba że oczekujesz spójności.

       Funkcje perla według kategorii

       Oto funkcje perla (włączając rzeczy, które wyglądają jak funkcje, np.  niektóre słowa kluczowe i  nazwane
       operatory), poukładane według kategorii.  Niektóre funkcje pojawiają się w więcej niż jednym miejscu.

       Funkcje dla skalarów lub łańcuchów
            chomp,  chop,  chr, crypt, hex, index, lc, lcfirst, length, oct, ord, pack, q/ŁAŃCUCH/, qq/ŁAŃCUCH/,
            reverse, rindex, sprintf, substr, tr///, uc, ucfirst, y///

       Wyrażenia regularne i porównywanie wzorców
            m//, pos, quotemeta, s///, split, study

       Funkcje numeryczne
            abs, atan2, cos, exp, hex, int, log, oct, rand, sin, sqrt, srand

       Funkcje dla prawdziwych  tablic (@ARRAYs)
            pop, push, shift, splice, unshift

       Funkcje dla danych listowych
            grep, join, map, qw/ŁAŃCUCH/, reverse, sort, unpack

       Funkcje dla %HASHów (tablic asocjacyjnych)
            delete, each, exists, keys, values

       Funkcje wejścia i wyjścia
            binmode, close, closedir, dbmclose, dbmopen, die, eof, fileno, flock, format, getc,  print,  printf,
            read, readdir, rewinddir, seek, seekdir, select, syscall, sysread, sysseek, syswrite, tell, telldir,
            truncate, warn, write

       Funkcje dla danych o określonej długości lub rekordów
            pack, read, syscall, sysread, syswrite, unpack, vec

       Funkcje dla deskryptorów plików, plików lub katalogów
            -X,  chdir,  chmod,  chown, chroot, fcntl, glob, ioctl, link, lstat, mkdir, open, opendir, readlink,
            rename, rmdir, stat, symlink, umask, unlink, utime

       Słowa kluczowe związane z kontrolą działania programu
            caller, continue, die, do, dump, eval, exit, goto, last, next, redo, return, sub, wantarray

       Słowa kluczowe związane z zakresami
            caller, import, local, my, package, use

       Różne funkcje
            defined, dump, eval, formline, local, my, reset, scalar, undef, wantarray

       Funkcje dla procesów i grup procesów
            alarm, exec, fork, getpgrp, getppid, getpriority, kill,  pipe,  qx/ŁAŃCUCH/,  setpgrp,  setpriority,
            sleep, system, times, wait, waitpid

       Słowa kluczowe związane z modułami perla
            do, import, no, package, require, use

       Słowa kluczowe związane z klasami i obiektowością
            bless, dbmclose, dbmopen, package, ref, tie, tied, untie, use

       Niskopoziomowe funkcje gniazd
            accept,  bind,  connect,  getpeername,  getsockname,  getsockopt,  listen,  recv,  send, setsockopt,
            shutdown, socket, socketpair

       Funkcje komunikacji międzyprocesowej Systemu V
            msgctl, msgget, msgrcv, msgsnd, semctl, semget, semop, shmctl, shmget, shmread, shmwrite

       Pobieranie informacji użytkownika i grupy
            endgrent,  endhostent,  endnetent,  endpwent,  getgrent,  getgrgid,  getgrnam,  getlogin,  getpwent,
            getpwnam, getpwuid, setgrent, setpwent

       Pobieranie informacji sieciowej
            endprotoent,  endservent,  gethostbyaddr,  gethostbyname,  gethostent,  getnetbyaddr,  getnetbyname,
            getnetent, getprotobyname, getprotobynumber, getprotoent, getservbyname, getservbyport,  getservent,
            sethostent, setnetent, setprotoent, setservent

       Funkcje związane z czasem
            gmtime, localtime, time, times

       Funkcje nowe w perl5
            abs, bless, chomp, chr, exists, formline, glob, import, lc, lcfirst, map, my, no, prototype, qx, qw,
            readline, readpipe, ref, sub*, sysopen, tie, tied, uc, ucfirst, untie, use

            *  -  sub  było  słowem  kluczowym  w perl4, lecz w perl5 jest to operator, który może być używany w
            wyrażeniach.

       Funkcje przedawnione w perl5
            dbmclose, dbmopen

       Alfabetyczny listing funkcji perla

       -X UCHWYTPLIKU

       -X WYRAŻ

       -X      Test pliku, gdzie X jest jedną z niżej wymienionych liter. Ten jednoargumentowy operator  pobiera
               argument,  nazwę  pliku  lub  jego uchwyt.  Następnie testuje plik i sprawdza, czy coś jest w nim
               prawdziwe. Jeśli argument zostanie pominięty, testuje $_, nie licząc  -t,  które  testuje  STDIN.
               Zasadniczo zwraca 1 dla wyniku pozytywnego i '' dla negatywnego, a wartość niezdefiniowaną, jeśli
               plik  nie  istnieje.  Mimo  śmiesznych  nazw,  priorytety są takie same jak każdym innym nazwanym
               operatorze jednoargumentowym i argument może być otoczony nawiasami.  Operator może być jednym z:

                   -r  Plik jest odczytywalny przez efektywny uid/gid.
                   -w  Plik jest zapisywalny przez efektywny uid/gid.
                   -x  Plik jest wykonywalny przez efektywny uid/gid.
                   -o  Właścicielem pliku jest efektywny uid.

                   -R  Plik jest odczytywalny przez rzeczywisty uid/gid.
                   -W  Plik jest zapisywalny przez rzeczywisty uid/gid.
                   -X  Plik jest wykonywalny przez rzeczywisty uid/gid.
                   -O  Właścicielem pliku jest rzeczywisty uid.

                   -e  Plik istnieje.
                   -z  Plik ma rozmiar zerowy.
                   -s  Plik ma rozmiar niezerowy (zwraca rozmiar).

                   -f  Plik jest prostym plikiem.
                   -d  Plik jest katalogiem.
                   -l  Plik jest dowiązaniem symbolicznym.
                   -p  Plik jest nazwanym potokiem (FIFO).
                   -S  Plik jest gniazdem.
                   -b  Plik jest blokowym plikiem specjalnym.
                   -c  Plik jest znakowym plikiem specjalnym.
                   -t  Uchwyt pliku jest otwarty do tty.

                   -u  Plik ma ustawiony bit `setuid'.
                   -g  Plik ma ustawiony bit `setgid'.
                   -k  Plik ma ustawiony bit `sticky'.

                   -T  Plik jest plikiem tekstowym.
                   -B  Plik jest plikiem binarnym (przeciwieństwo -T).

                   -M  Wiek pliku w dniach, gdy uruchomił się skrypt
                   -A  To samo dla czasu dostępu.
                   -C  To samo dla zmiany informacji inode.

               Interpretacja operatorów praw pliku -r, -R, -w, -W, -x i -X bazuje jedynie  na  prawach  pliku  i
               uid/gid  użytkownika.  Mogą  istnieć  inne  powody,  dla  których  w rzeczywistości nie możesz go
               odczytać, zapisać lub uruchomić. Zauważ też, że dla superużytkownika, operatory -r, -R, -w, i  -W
               zawsze  zwracają 1, a -x i -X zwracają 1, jeśli ustawiony jest tak dowolny bit wykonania. Skrypty
               uruchamiane przez superużytkownika powinny więc wywoływać do celów testowania praw pliku  funkcję
               stat() lub tymczasowo zmienić uid na coś innego.

               Przykład:

                   while (<>) {
                       chop;
                       next unless -f $_;      # ignoruj specjalne
                       ...
                   }

               Zauważ,  że  -s/a/b/ nie dokonuje zanegowanego podstawienia.  Powiedzenie -exp($foo) działa wciąż
               zgodnie z oczekiwaniami, jednak jedynie pojedyncze litery za  znakiem  minusa  są  interpretowane
               jako testy plikowe.

               Przełączniki -T i -B działają tak, że testują pierwszy blok pliku w poszukiwaniu dziwnych znaków,
               takich jak dziwne kody sterujące, lub znaki z wysokiego zestawu znaków. Jeśli jest ich zbyt wiele
               (>30%),  to jest to plik -B, w przeciwnym wypadku to plik -T.  Dodatkowo, każdy plik, zawierający
               w pierwszym bloku null jest uważany za plik binarny. Jeśli -T lub -B  jest  używane  na  uchwycie
               pliku,  to  testowany jest bieżący bufor standardowego wejścia zamiast pierwszego bloku.  Zarówno
               -T jak i -B zwracają odpowiedź pozytywną dla pliku null lub pliku,  który  jest  na  EOF  podczas
               testowania  jego  uchwytu.  Z  uwagi  na  to,  że dla testu -T trzeba odczytać plik, w większości
               przypadków używa się najpierw -f, jak w next unless -f $file && -T $file.

               Jeśli któryś z operatorów testu plików (lub  stat()  czy  lstat())  otrzymałby  specjalny  uchwyt
               pliku,  składający  się z samego podkreślenia, to użyta zostałaby struktura `stat' z poprzedniego
               testu pliku, oszczędzając wywołania systemowego. (Nie działa to  dla  -t,  a  ponadto  powinieneś
               pamiętać,  że  lstat()  i  -l  zostawiają w strukturze wartości dla dowiązań symbolicznych, a nie
               rzeczywistych plików.) Przykład:

                   print "Can do.\n" if -r $a ⎪⎪ -w _ ⎪⎪ -x _;

                   stat($filename);
                   print "Readable\n" if -r _;
                   print "Writable\n" if -w _;
                   print "Executable\n" if -x _;
                   print "Setuid\n" if -u _;
                   print "Setgid\n" if -g _;
                   print "Sticky\n" if -k _;
                   print "Text\n" if -T _;
                   print "Binary\n" if -B _;

       abs WARTOŚĆ

       abs     Zwraca moduł argumentu.  Jeśli parametr WARTOŚĆ zostanie pominięty, to używane jest $_.

       accept NOWEGNIAZDO,GNIAZDO
               Przyjmuje nadchodzące połączenie na gnieździe, podobnie jak  wywołanie  systemowe  accept(2).  Po
               sukcesie  zwraca spakowany adres, a w razie porażki FALSE. Przykład użycia można znaleźć w sekcji
               Sockets: Client/Server Communication strony podręcznika perlipc(1).

       alarm SEKUNDY

       alarm   Powoduje, że sygnał ALARM jest dostarczany do tego procesu po określonej  liczbie  sekund.  Jeśli
               nie  podano  parametru  sekund,  używana  jest  wartość  zachowana  w $_. (Niestety na niektórych
               maszynach czas może być do sekundy krótszy niż ten, który podasz, zależnie od  sposobu  zliczania
               sekund.)  Naraz  odliczać  może  tylko  jeden  zegar.  Każde wywołanie wyłącza poprzedni zegar, a
               argument 0 wyłącza poprzedni zegar bez uruchamiania nowego. Zwrócona wartość jest ilością  czasu,
               pozostającego poprzedniemu zegarowi.

               Dla  opóźnień  lub  większej  dokładności  niż  jedna  sekunda,  możesz użyć perlowego interfejsu
               syscall(), i dostać się do setitimer(2), o ile twój system to  obsługuje.  W  przeciwnym  wypadku
               obejrzyj  opis  select(),  gdzieś  w tym dokumencie. Ogólnie częstym błędem jest łączenie wywołań
               alarm() i sleep().

               Jeśli chcesz używać alarm() do timeout'owania wywołania systemowego, musisz użyć  pary  eval/die.
               Nie  można oczekiwać, że alarm spowoduje, że wywołanie systemowe się zakończy, z $! ustawionym na
               EINTR, gdyż na niektórych systemach perl ustawia obsługę sygnałów tak, że wywołania systemowe  są
               restartowane. Używanie eval/die działa zawsze.

                   eval {
                       local $SIG{ALRM} = sub { die "alarm\n" };       # NB \n wymagane
                       alarm $timeout;
                       $nread = sysread SOCKET, $buffer, $size;
                       alarm 0;
                   };
                   die if $@ && $@ ne "alarm\n";       # propaguj błędy
                   if ($@) {
                       # timeout
                   }
                   else {
                       # bez timeouta
                   }

       atan2 Y,X
               Zwraca arcus tangens z Y/X, w zakresie  -pi do pi.

               Dla operacji tangens, możesz użyć funkcji POSIX::tan(), lub użyć znanej relacji:

                   sub tan { sin($_[0]) / cos($_[0])  }

       bind GNIAZDO,NAZWA
               Przywiązuje  adres  sieciowy  do  gniazda,  podobnie jak wywołanie systemowe bind(2). Po sukcesie
               zwraca  TRUE,  a  w  przeciwnym  wypadku  FALSE.  NAZWA  powinna  być  spakowanym  adresem,  typu
               odpowiedniego  dla  gniazda.  Zobacz  przykłady  w sekcji Sockets: Client/Server Communication na
               stronie podręcznika perlipc(1).

       binmode UCHWYTYPLIKU
               Powoduje, że plik przełącza się  w  tryb  binarny  zapisu/odczytu.  Ma  to  miejsce  w  systemach
               operacyjnych,  które  dokonują  takiego  rozróżnienia.  Pliki,  które  nie  są w trybie binarnym,
               ukrywają wejściowe sekwencje CR LF pod LF, a sekwencje wyjściowe LF są tłumaczone na CR LF.  Tryb
               binarny  nie wpływa na nic pod Unixem; jednak pod MS-DOS i innymi archaicznymi systemami, może to
               być niezbędna właściwość--w przeciwnym  wypadku  twoja  biblioteka  C  może  zniekształcić  plik.
               Kluczem  do  rozróżniania  systemów,  które  potrzebują  trybu  binarnego  od  tych, które go nie
               potrzebują, jest ich format pliku tekstowego. Systemy podobne do Unix i Plan9,  oddzielają  linie
               pojedynczym znakiem i kodują go w C jako '\n'. Nie potrzebują one trybu binarnego. Wszystkie inne
               potrzebują. Jeśli UCHWYTPLIKU jest wyrażeniem, to wartość brana jest jako nazwa uchwytu pliku.

       bless REF,NAZWAKLASY

       bless REF
               Funkcja  ta  mówi  rzeczy,  wskazywanej  przez  referencję REF, że jest teraz obiektem w pakiecie
               NAZWAKLASY--lub w bieżącym pakiecie, jeśli nie podano parametru nazwy klasy. Funkcja  zwraca  dla
               pewności  referencję,  gdyż  jest ona często ostatnią rzeczą w konstruktorze. Jeśli błogosławiona
               funkcja ma być dziedziczona w klasach potomnych, to  zawsze  używaj  wersji  dwuargumentowej  tej
               funkcji. Dla dalszych informacji o błogosławieniu obiektów zobacz stronę perlobj(1).

       caller WYRAŻ

       caller  Zwraca  kontekst  bieżącego wywołania podprocedury. W kontekście skalarnym, jeśli było wywołanie,
               tj. jeśli jesteśmy w podprocedurze lub eval() lub require(), zwraca nazwę pakietu wywołującego, a
               w przeciwnym razie wartość niezdefiniowaną. W kontekście listowym, zwraca

                   ($pakiet, $nazwapliku, $linia) = caller;

               Z parametrem WYRAŻ zwraca trochę dodatkowych danych, z których korzysta  debugger  do  drukowania
               śladu stosu. Wartość WYRAŻ wskazuje, o ile ramek wywołań należy się cofnąć od bieżącej.

                   ($pakiet, $nazwapliku, $linia, $podprocedura,
                    $maargumenty, $chcetablię, $teksteval, $jest_require) = caller($i);

               $podprocedura  tutaj  może  być "(eval)", jeśli ramka nie jest wywołaniem podproceduralnym. W tej
               sytuacji  ustawiane  są  dodatkowe  elementy,  $teksteval  i  $jest_require:  $jest_require  jest
               prawdziwe,  jeśli  ramka została utworzona w instrukcji require lub use, $teksteval zawiera tekst
               instrukcji eval WYRAŻ.  Praktycznie, dla  instrukcji  eval  BLOCK,  $nazwapliku  to  "(eval)",  a
               $teksteval  jest  niezdefiniowany.   (Zauważ  też,  że każda instrukcja use tworzy ramkę require.
               (wewnątrz ramki eval WYRAŻ)

               Co więcej, po wywołaniu z pakietu DB, caller zwraca jeszcze dokładniejsze dane:  ustawia  zmienną
               listową @DB::args na argumenty, z którymi wywołano podprocedurę.

       chdir WYRAŻ
               Zmienia  katalog  roboczy  na  WYRAŻ.  Jeśli  WYRA  jest pominięte, to zmienia katalog na katalog
               domowy. Po sukcesie zwraca TRUE, a w przeciwnym wypadku FALSE. Zobacz przykład przy opisie die().

       chmod LISTA
               Zmienia prawa listy plików. Pierwszy element listy  musi  być  numerycznym  zapisem  praw,  który
               powinien  być  liczbą  ósemkową,  a który z pewnością nie powinien być łańcuchem cyfr ósemkowych:
               0644 jest ok, ale '0644'  nie  jest.   Zwraca  liczbę  plików,  których  prawa  zmieniono.  Jeśli
               wszystkim  co  masz  jest  łańcuch,  zobacz  też  wpis  oct,  znajdujący  się gdzie indziej w tym
               dokumencie.

                   $cnt = chmod 0755, 'foo', 'bar';
                   chmod 0755, @executables;
                   $mode = '0644'; chmod $mode, 'foo';      # ustawia prawa na --w----r-T!
                   $mode = '0644'; chmod oct($mode), 'foo'; # to jest lepsze
                   $mode = 0644;   chmod $mode, 'foo';      # to jest najlepsze

       chomp ZMIENNA

       chomp LISTA

       chomp   Jest to troszkę bezpieczniejsza wersja wpisu chop, opisanego  gdzie  indziej  w  tym  dokumencie.
               Usuwa  wszelkie  zakończenia  linii,  które  odpowiadają  bieżącej  wartości $/ (znanego też jako
               $INPUT_RECORD_SEPARATOR w  module  English).   Zwraca  całkowitą  liczbę  znaków,  usuniętych  ze
               wszystkich  argumentów.  Często jest używany do usuwania nowych linii z końca rekordu wejściowego
               jeśli obawiasz się, że rekordowi może jej  brakować.  W  trybie  `paragraph'  ($/  =  ""),  usuwa
               wszystkie  kończące znaki nowych linii z łańcuchów.  Jeśli pominięta zostanie ZMIENNA, to ucinane
               jest $_.  Przykład:

                   while (<>) {
                       chomp;  # zapobiegaj \n na ostatnim polu
                       @array = split(/:/);
                       ...
                   }

               Możesz w zasadzie uciąć wszystko co jest lwartością, włączając przypisanie:

                   chomp($cwd = `pwd`);
                   chomp($answer = <STDIN>);

               Jeśli ucinasz listę, obcinany jest każdy element, a zwracana jest lista usuniętych znaków.

       chop ZMIENNA

       chop LISTA

       chop    Odrywa ostatni znak łańcucha i zwraca jego wartość. Jest przede  wszystkim  używany  do  usuwania
               nowej  linii  z końca rekordu wejściowego, lecz jest dużo bardziej efektywny niż s/\n//, ponieważ
               ani nie skanuje, ani nie kopiuje łańcucha. Jeśli pominięto ZMIENNĄ, odrywa $_.  Przykład:

                   while (<>) {
                       chop;   # zapobież \n na ostatnim polu
                       @array = split(/:/);
                       ...
                   }

               Możesz w zasadzie oderwać cokolwiek, co jest lwartością, włączając przypisanie:

                   chop($cwd = `pwd`);
                   chop($answer = <STDIN>);

               Jeśli obrywasz listę, obrywany  jest  każdy  element.  Zwracana  jest  tylko  wartość  ostatniego
               oderwania.

               Zauważ,  że  chop zwraca ostatni znak. Aby zwrócić wszystkie poza ostatnim, użyj substr($lancuch,
               0, -1).

       chown LISTA
               Zmienia właściciela (i grupę) listy plików. Pierwsze dwa argumenty listy muszą  być  NUMERYCZNYMI
               uid i gid, podanym w tej kolejności.  Zwraca liczbę plików, na których powiodła się zamiana.

                   $cnt = chown $uid, $gid, 'foo', 'bar';
                   chown $uid, $gid, @filenames;

               Oto przykład, który podgląda nienumeryczne uid'y w pliku z hasłami:

                   print "User: ";
                   chop($user = <STDIN>);
                   print "Files: "
                   chop($pattern = <STDIN>);

                   ($login,$pass,$uid,$gid) = getpwnam($user)
                       or die "$user not in passwd file";

                   @ary = <${pattern}>;        # rozwiń nazwy plików
                   chown $uid, $gid, @ary;

               Na  większości  systemów  nie możesz zmieniać właścicielstwa, chyba że jesteś superużytkownikiem,
               choć powinieneś być  w  stanie  zmieniać  grupę  na  dowolną  z  twoich  drugorzędnych  grup.  Na
               niezabezpieczonych  systemach  ograniczenia  te  mogą  być  mniejsze,  lecz nie jest to przenośne
               założenie.

       chr LICZBA

       chr     Zwraca znak, reprezentowany przez LICZBĘ w zbiorze znaków.  Na przykład, chr(65) to "A" w  ASCII.
               Dla odwrócenia tego działania, użyj ord, które jest opisane gdzie indziej w tym dokumencie.

               Jeśli pominięto LICZBĘ, to używane jest $_.

       chroot NAZWAPLIKU

       chroot  Funkcja  ta  działa tak samo jak wywołanie systemowe chroot(2): powoduje, że podany katalog staje
               się nowym katalogiem głównym dla wszelkich nowych ścieżek, które będą się zaczynały od "/". Tyczy
               się to twojego procesu i jego dzieci. Ze względów bezpieczeństwa, wywołanie to  jest  zastrzeżone
               dla superużytkownika. Jeśli pominięto NAZWĘPLIKU, to używany jest $_.

       close UCHWYTPLIKU
               Zamyka  plik  lub  potok związany z uchwytem, zwracając TRUE jedynie w wypadku, gdy stdio da radę
               opróżnić wszystkie bufory i zamknąć systemowy deskryptor pliku. Jeśli uchwyt pliku  pochodził  od
               otwartego  potoku,  funkcja zwróci FALSE jeśli któreś z potrzebnych wywołań systemowych zawiedzie
               lub jeśli program zakończy pracę z niezerowym statusem. (Jeśli problemem jest  fakt,  że  program
               skończył się z niezerowym kodem, to $!  będzie ustawione na 0.)  Nie musisz zamykać UCHWYTUPLIKU,
               jeśli  chcesz  go  zaraz  potem  wykorzystać  do  innego otwarcia open(), ponieważ funkcja open()
               zamknie go za ciebie. Jednak jawne zamknięcie pliku  wejściowego  resetuje  licznik  linii  ($.),
               podczas  gdy  niejawne  zamknięcie  w  open()  tego nie robi. Poza tym, zamykanie potoku powoduje
               oczekiwanie na zakończenie procesu z potoku, na wypadek gdybyś chciał  później  obejrzeć  wyjście
               potoku. Jawne zamykanie potoku wstawia wartość statusu komendy do $?.  Przykład:

                   open(OUTPUT, '⎪sort >foo'); # potok do `sort'
                   ...                         # drukuj różne rzeczy na wyjście
                   close OUTPUT;               # czekaj na zakończenie `sort'
                   open(INPUT, 'foo');         # pobierz wyniki sortowania

               UCHWYTPLIKU może być wyrażeniem, którego wartość daje rzeczywistą nazwę uchwytu pliku.

       closedir UCHWYTKATALOGU
               Zamyka katalog, otworzony funkcją opendir().

       connect GNIAZDO,NAZWA
               Próbuje  połączyć  się  ze  zdalnym gniazdem, zupełnie tak jak wywołanie systemowe connect(2). Po
               sukcesie zwraca TRUE, a w przeciwnym wypadku FALSE. NAZWA powinna być  spakowanym  typem  adresu,
               odpowiednim  dla  gniazda.  Zobacz  przykłady  w  sekcji  Sockets: Client/Server Communication na
               stronie podręcznika perlipc(1).

       continue BLOK
               W rzeczywistości jest to instrukcja kontroli wykonywania programu, a nie funkcja. Jeśli do  BLOKU
               dołączone  jest  continue  BLOK  (zazwyczaj  we while lub foreach), to jest zawsze wykonywany tuż
               przed kolejnym wykonaniem warunku, zupełnie jak trzecia część pętli for w C. Tak  więc  może  być
               używane do zwiększania zmiennej pętli, nawet gdy pętla była kontynuowana z pomocą instrukcji next
               (która jest podobna do instrukcji continue z C).

       cos WYRAŻ
               Zwraca  cosinus  z  WYRAŻ  (wyrażonego w radianach). Jeśli pominie się argument WYRAŻ, to używany
               jest $_.

               Dla operacji arcus cosinus, możesz użyć funkcji POSIX::acos(), lub następującej relacji:

                   sub acos { atan2( sqrt(1 - $_[0] * $_[0]), $_[0] ) }

       crypt CZYSTYTEKST,SALT
               Koduje łańcuch na wzór funkcji crypt(3) z biblioteki C. Może to być użyteczne np. do  sprawdzania
               plików  z  hasłami  w  poszukiwaniu  słabych  haseł.  Robić to powinni tylko ludzie noszący białe
               kapelusze.

               Zauważ, że crypt jest funkcję jednokierunkową,  podobnie  jak  rozbijanie  jajek  na  omlet.  Nie
               istnieje  (znana)  funkcja  dekodująca.  W  wyniku,  funkcja  wcale  nie  jest  tak  użyteczna do
               kryptografii. (Dla tego, zobacz najbliższy mirror CPAN.)

               Oto przykład, który daje pewność, że ktokolwiek uruchomi ten program, zna swoje własne hasło:

                   $pwd = (getpwuid($<))[1];
                   $salt = substr($pwd, 0, 2);

                   system "stty -echo";
                   print "Hasło: ";
                   chop($word = <STDIN>);
                   print "\n";
                   system "stty echo";

                   if (crypt($word, $salt) ne $pwd) {
                       die "Niezmiernie mi przykro...\n";
                   } else {
                       print "ok\n";
                   }

               Oczywiście wpisywanie swojego hasła za każdym razem, gdy ktoś o nie poprosi jest niemądre.

       dbmclose HASH
               [Funkcja ta jest przedawniona przez funkcję untie().]

               Przerywa powiązanie między plikiem DBM a tablicą asocjacyjną.

       dbmopen HASH,NAZWADB,PRAWA
               [funkcja ta jest przedawniona przez funkcję tie().]

               Łączy to plik dbm(3), ndbm(3), sdbm(3), gdbm(), lub Berkeley DB z tablicą asocjacyjną. HASH  jest
               nazwą  tablicy  asocjacyjnej.  (w przeciwieństwie do normalnego otwierania, pierwszy argument NIE
               jest uchwytem pliku, choć wygląda podobnie). NAZWADB jest nazwą bazy  danych  (bez  rozszerzeń  w
               rodzaju  .dir  czy  .pag).  Jeśli baza nie istnieje, to jest tworzona z prawami określanymi przez
               PRAWA (zmodyfikowanymi przez umask()). Jeśli twój system obsługuje tylko starsze funkcje DBM,  to
               możesz  w swoim programie wykonać tylko jeden dbmopen(). W starszych wersjach perla, jeśli system
               nie miał ani DBM, ani  ndbm, wywołanie  dbmopen  powodowało  błąd  krytyczny;  teraz  schodzi  do
               sdbm(3).

               Jeśli  nie  masz  prawa  zapisu do pliku DBM, to możesz tylko odczytywać zmienne asocjacyjne, nie
               możesz ich ustawiać. Jeśli chcesz spróbować, czy możesz zapisywać, użyj  albo  testów  plikowych,
               albo spróbuj ustawić próbny wpis asocjacyjny wewnątrz eval(), co przechwyci błąd.

               Zauważ,  że  funkcje  takie,  jak  keys()  i values() mogą zwracać w użyciu z plikami DBM wielkie
               tablice. Możesz do iteracji przez wielkie pliki DBM używać także each(). Przykład:

                   # drukuj offsety pliku historii
                   dbmopen(%HIST,'/usr/lib/news/history',0666);
                   while (($key,$val) = each %HIST) {
                       print $key, ' = ', unpack('L',$val), "\n";
                   }
                   dbmclose(%HIST);

               Zobacz też stronę podręcznika AnyDBM_File -- jest tam bardziej ogólny opis wad  i  zalet  różnych
               podejść dbm. Zobacz też stronę DB_File, dla bogatej implementacji.

       defined WYRAŻ

       defined Zwraca wartość logiczną, mówiącą czy WYRAŻ ma wartość inną od niezdefiniowanej undef. Jeśli WYRAŻ
               nie jest obecne, to testowane jest $_.

               Wiele  operacji  zwraca undef aby wskazać błąd, koniec pliku, błąd systemowy, niezainicjalizowaną
               zmienną i inne wyjątki. Funkcja ta pozwala  odróżnić  undef  od  innych  wartości.  (Prosty  test
               logiczny  nie  rozróżni  undef,  zero,  pustego  łańcucha,  i  "0",  które wszystkie są jednakowo
               fałszywe.)  Zauważ, że ponieważ undef jest prawidłowym skalarem, to jego  obecność  niekoniecznie
               musi  wskazywać  warunek  wyjątkowy: pop() zwraca undef gdy jego argument jest pustą tablicą, lub
               gdy zwracany element jest wartością Wundef.

               defined() można używać też do sprawdzania czy podprocedura wychodzi. Z drugiej  strony,  używanie
               defined()  na  agregatach  (tablicach  asocjacyjnych  i  tablicach)  nie  musi zwrócić zgodnych z
               intuicją wyników i powinno się go w tych przypadkach unikać.

               Gdy używane na elemencie tablicy asocjacyjnej, mówi czy wartość jest zdefiniowana, a nie czy taki
               klucz istnieje w tablicy. Dla tego celu, użyj exists, które jest  opisane  gdzie  indziej  w  tym
               dokumencie.

               Przykłady:

                   print if defined $switch{'D'};
                   print "$val\n" while defined($val = pop(@ary));
                   die "Can't readlink $sym: $!"
                       unless defined($value = readlink $sym);
                   sub foo { defined &$bar ? &$bar(@_) : die "Brak bar"; }
                   $debugging = 0 unless defined $debugging;

               Uwaga:  Wielu  ludzi  nadużywa  defined(), a potem są oni zaskoczeni, że liczba 0 i "" (łańcuch o
               długości zero) są w rzeczywistości wartościami zdefiniowanymi. Na przykład, jeśli powiesz

                   "ab" =~ /a(.*)b/;

               to porównanie wzorca się powiedzie i $1 będzie zdefiniowane, niezależnie od tego,  że  trafiło  w
               "nic".  W  rzeczywistości  nie  można  powiedzieć,  że  trafiło  w "nic". Raczej trafiło w coś, o
               długości zera znaków. Jest to wszystko bardzo  czyste  i  uczciwe.  Gdy  funkcja  zwraca  wartość
               niezdefiniowaną,  jest  to  przyznanie  się,  że  nie  mogła  dać  uczciwej  odpowiedzi. Tak więc
               powinieneś używać defined() tylko jeśli sprawdzasz  działanie  tego,  co  próbujesz  osiągnąć.  W
               niektórych wypadkach, rzeczą, której oczekujesz jest proste porównanie z 0 lub "".

               Obecnie  używanie  defined() na całej tablicy lub tablicy asocjacyjnej, zgłasza tylko czy została
               dla niego zaalokowana pamięć. Tak więc tablica, którą ustawiasz na pustą  listę  jest  początkowo
               niezdefiniowana, a gdy się zapełni, staje się zdefiniowana. Zamiast tego powinieneś użyć prostego
               testu rozmiaru:

                   if (@an_array) { print "ma elementy tablicowe\n" }
                   if (%a_hash)   { print "ma elementy asocjacyjne\n"   }

               Użycie  na  nich  undef()  powoduje  wyczyszczenie  ich  pamięci  i  zgłoszenie,  że  nie  są już
               zdefiniowane. Nie powinno się jednak tego robić, chyba że nie masz  zamiaru  ich  więcej  używać,
               ponieważ po prostu szybciej jest używać pamięci gotowej do wypełnienia, niż alokować ją od nowa.

               Zachowanie  defined()  na  agregatach może zostać zmienione, poprawione, lub zepsute w następnych
               wersjach perla.

               Zobacz też opisy undef, exists,  i ref, znajdujące się w innych miejscach tego dokumentu.

       delete WYRAŻ
               Kasuje podany klucz(e) i związane z nim wartości z  tablicy  asocjacyjnej.  Dla  każdego  klucza,
               zwracana jest skasowana wartość związana z kluczem albo wartość niezdefiniowana, jeśli taki klucz
               nie  istniał.  Kasowanie  z  $ENV{}  modyfikuje  środowisko.  Kasowanie  z  tablicy asocjacyjnej,
               podłączonej do pliku DBM, kasuje wpis z pliku. (lecz kasowanie z takiego pliku nie  musi  zwracać
               niczego.)

               Następujący przykład kasuje wszystkie wartości tablicy asocjacyjnej:

                   foreach $key (keys %HASH) {
                       delete $HASH{$key};
                   }

               Podobnie robi następujące:

                   delete @HASH{keys %HASH}

               (Ale  obydwa  są  wolniejsze  niż  komenda  undef().)   Zauważ,  że  WYRAŻ  może  być arbitralnie
               skomplikowany tak długo, dopóki końcowa operacja jest  podejrzeniem  elementu  asocjacyjnego  lub
               wycinkiem tablicy asocjacyjnej (`hash slice'):

                   delete $ref->[$x][$y]{$key};
                   delete @{$ref->[$x][$y]}{$key1, $key2, @morekeys};

       die LISTA
               Poza  obrębem  eval()  drukuje  wartość  LISTY  na  STDERR  i kończy pracę z bieżącą wartością $!
               (errno). Jeśli $!  wynosi 0, to kończy z wartością ($?  >>  8)  (status  poprzedniej  `komendy`).
               Jeśli  ($?  >> 8) jest zerem, to kończy z wartością 255.  Wewnątrz eval, komunikat o błędzie jest
               pakowany do $@, a eval() jest przerywany wartością niezdefiniowaną; powoduje to,  że  die()  może
               podnieść wyjątek.

               Równoważne przykłady:

                   die "Nie mogę przejść do spool: $!\n" unless chdir '/usr/spool/news';
                   chdir '/usr/spool/news' or die "Nie mogę przejść do spool: $!\n"

               Jeśli  wartość  WYRAŻ  nie  kończy  się  nową  linią, drukowany jest również numer bieżącej linii
               skryptu i wejścia, a za nimi doklejana jest nowa linia.  Wskazówka: Czasami dodanie  ",  stopped"
               do  twojego  komunikatu  może  nadać  mu  więcej  sensu po doklejeniu łańcucha "at foo line 123".
               Załóżmy, że uruchamiasz skrypt "canasta".

                   die "/etc/games is no good";
                   die "/etc/games is no good, stopped";

               dają w efekcie odpowiednio:

                   /etc/games is no good at canasta line 123.
                   /etc/games is no good, stopped at canasta line 123.

               Zobacz także exit() i warn().

               Można zaaranżować sprawę  tak,  że  callback  będzie  wywoływany  tuż  przed  uczynieniem  swojej
               powinności  przez  die(). Należy w tym celu ustawić hak $SIG{__DIE__}.  Związany handler zostanie
               wywołany z tekstem błędu i może zmienić treść komunikatu błędu, wywołując die() ponownie.  Zobacz
               stronę perlvar(1), dla dalszych detali o ustawianiu wpisów %SIG, a także  opis  eval()  dla  paru
               przykładów.

       do BLOK Nie  jest  to  funkcja.  Zwraca  wartość ostatniej komendy w sekwencji komend, wskazywanych przez
               BLOK. Po zmodyfikowaniu przez modyfikator pętli, wywołuje jednokrotnie  BLOK  przed  sprawdzeniem
               warunku pętli. (W innych instrukcjach modyfikatory pętli sprawdzają warunek na samym początku.)

       do PODPROCEDURA(LISTA)
               Niezalecana forma wywołania podprocedury. Zobacz stronę perlsub(1).

       do WYRAŻ
               Używa  wartości  WYRAŻ  jako  nazwy  pliku  i  wykonuje  zawartość  tego pliku jako skrypt perla.
               Podstawowym zadaniem tej instrukcji jest włączanie podprocedur z bibliotek perla.

                   do 'stat.pl';

               jest zupełnie jak

                   eval `cat stat.pl`;

               tylko trochę bardziej efektywne, utrzymuje śledzenie bieżącej  nazwy  plików  dla  komunikatów  o
               błędach  i  przeszukuje  wszystkie  katalogi  -I, jeśli plik nie znajduje się w katalogu bieżącym
               (zobacz także tablicę @INC w sekcji Predefined Names podręcznika perlvar(1)).  Jednak jest  takie
               samo w sensie, że przetwarza (parses) plik za każdym razem, gdy go wywołasz, więc przypuszczalnie
               nie chciałbyś tego wewnątrz pętli.

               Zauważ,  że  włączanie  modułów  bibliotecznych można załatwić lepiej z pomocą operatorów use() i
               require(), które również dokonują sprawdzania błędów i powodują wyjątki jeśli jest jakiś problem.

       dump ETYKIETA
               Powoduje to natychmiastowy zrzut  core.  Jest  to  po  to,  byś  mógł  użyć  programu  undump  do
               konwertowania zrzutu core do pliku binarnego po zainicjalizowaniu wszystkich zmiennych z początku
               programu.  Po  uruchomieniu  nowego  binarium,  rozpocznie się ono od wywołania goto ETYKIETA (ze
               wszystkimi ograniczeniami, na które cierpi goto).  Myśl o  tym,  jak  o  goto  z  interweniującym
               zrzutem  core  i reinkarnacją. Jeśli ETYKIETA jest pominięta, program restartuje się od początku.
               UWAGA: wszelkie pliki, które były otwarte w  momencie  zrzutu  core  nie  będą  otwarte  w  nowej
               inkarnacji programu, powodując przypuszczalnie zamieszanie w części perla. Zobacz też opcję -u ze
               strony perlrun(1).

               Przykład:

                   #!/usr/bin/perl
                   require 'getopt.pl';
                   require 'stat.pl';
                   %days = (
                       'Sun' => 1,
                       'Mon' => 2,
                       'Tue' => 3,
                       'Wed' => 4,
                       'Thu' => 5,
                       'Fri' => 6,
                       'Sat' => 7,
                   );

                   dump QUICKSTART if $ARGV[0] eq '-d';

                   QUICKSTART:
                   Getopt('f');

       each HASH
               Po  wywołaniu  w  kontekście  listowym,  zwraca  dwuelementową tablicę, składającą się z klucza i
               wartości następnego elementu asocjacyjnego, tak że możesz iterować poprzez tablicę. Po  wywołaniu
               w kontekście skalarnym, zwraca tylko klucz  dla następnego elementu asocjacyjnego. (Uwaga: Klucze
               mogą  mieć wartość "0" lub "", co jest logicznie nieprawidłowe; możesz w tym celu chcieć zapobiec
               konstrukcjom jak while ($k = each %foo) {} .)

               Wpisy są zwracane w kolejności dość losowej. Gdy tablica asocjacyjna jest całkowicie odczytana, w
               kontekście listowym zwracana jest tablica null (co po przypisaniu daje wartość FALSE  (0)),  a  w
               kontekście skalarnym zwracany jest undef.  Następne wywołanie each() po tym rozpocznie iterowanie
               od  nowa.   Dla  każdej tablicy asocjacyjnej istnieje pojedynczy iterator, dzielony przez funkcje
               each(), keys() i values(); może być zresetowany przez odczytanie wszystkich elementów tablicy lub
               przez wywołanie keys HASH lub  values  HASH.   Jeśli  dodajesz,  lub  kasujesz  elementy  tablicy
               asocjacyjnej  podczas jej iterowania, to może się zdarzyć, że niektóre wpisy utracisz, a niektóre
               dostaniesz zduplikowane.  Nie rób więc tego.

               Następujący przykład drukuje środowisko, podobnie  jak  program  printenv(1),  lecz  w  odwrotnej
               kolejności:

                   while (($key,$value) = each %ENV) {
                       print "$key=$value\n";
                   }

               Zobacz też keys() i values().

       eof UCHWYTPLIKU

       eof ()

       eof     Zwraca  1,  jeśli  następny odczyt z UCHWYTUPLIKU zwróci koniec pliku (eof) lub jeśli UCHWYTPLIKU
               nie jest otwarty. UCHWYTPLIKU może być wyrażeniem, którego wartość daje prawdziwą  nazwę  uchwytu
               pliku.   (Zauważ,  że  ta funkcja w rzeczywistości odczytuje znak, a potem wstawia go z powrotem,
               więc nie jest zbyt użyteczna w kontekście interaktywnym.)  Nie czytaj z pliku terminalowego  (lub
               nie wołaj eof(UCHWYTPLIKU)) po osiągnięciu końca pliku. Pliki takie, jak terminale mogą po  takim
               zabiegu utracić warunek końca pliku.

               eof  bez  argumentów,  używa  jako  argumentu  ostatniego  odczytu  pliku.  Puste nawiasy () mogą
               wskazywać na pseudo plik, złożony z plików, wymienionych w linii komend, np.  eof()  dobrze  jest
               używać wewnątrz pętli while (<>), aby wykryć koniec ostatniego pliku. Przykłady:

                   # resetuj numerowanie linii dla każdego pliku wejściowego
                   while (<>) {
                       print "$.\t$_";
                       close(ARGV) if (eof);   # Nie eof().
                   }

                   # wstaw kreski przed ostatnią linią ostatniego pliku
                   while (<>) {
                       if (eof()) {
                           print "--------------\n";
                           close(ARGV);        # close or break; is needed if we
                                               # are reading from the terminal
                       }
                       print;
                   }

               Wskazówka  praktyczna:  w  perlu prawie nigdy nie trzeba używać eof, ponieważ operatory wejściowe
               zwracają undef gdy nie będą miały więcej danych.

       eval WYRAŻ

       eval BLOK
               WYRAŻ jest przetwarzany i wykonywany tak, jakby był maleńkim programem perla. Jest  wywoływany  w
               kontekście bieżącego programu perla, więc wszelkie ustawienia zmiennych lub definicje podprocedur
               i  formatów  zostają  dalej. Zwracana wartość jest wartością ostatniego wykonanego wyrażenia, lub
               wartością, przekazaną przez return, czyli tak  jak  w  podprocedurach.  Ostatnie  wyrażenie  jest
               wykonywane w kontekście skalarnym, lub tablicowym, zależnie od kontekstu eval.

               Jeśli  pojawi  się  błąd składni lub błąd czasu działania albo jeśli wykonana zostanie instrukcja
               die(), to zwrócona zostanie wartość niezdefiniowana, a  $@  zostanie  ustawione  na  komunikat  o
               błędzie.   Jeśli  nie  było  błędu, $@ będzie łańcuchem null.  Jeśli WYRAŻ zostanie pominięte, to
               wykonywane jest $_.  Ostatni średnik, jeśli  taki  istnieje,  może  być  pominięty  w  wyrażeniu.
               Ostrzegam  jednak,  że  używanie eval()  nie wycisza perla od drukowania ostrzeżeń na STDERR, ani
               nie upycha tekstu tych komunikatów  do  $@.   Aby  zrobić  którąś  z  tych  rzeczy,  musisz  użyć
               zabudowania $SIG{__WARN__}. Zobacz warn() i stronę perlvar(1).

               Zauważ,  że  ponieważ eval() przechwytuje krytyczne (w innych wypadkach) błędy, to jest przydatny
               dla  określania  czy  konkretna  właściwość  (taka,  jak  np.  socket(),  symlink(),  itp.   jest
               zaimplementowana.  Jest to również mechanizm perla obsługiwania wyjątków, gdzie operator die jest
               mechanizmem ich podnoszenia.

               Jeśli wykonywany kod się nie różni, możesz użyć postaci eval-BLOK do wychwytywania  błędów  czasu
               działania, bez potrzeby rekompilacji za każdym razem. Błąd, jeśli się pojawi, jest wciąż zwracany
               w $@.  Przykłady:

                   # spowoduj, by dzielenie przez zero nie było krytyczne
                   eval { $answer = $a / $b; }; warn $@ if $@;

                   # to samo, mniej efektywnie
                   eval '$answer = $a / $b'; warn $@ if $@;

                   # błąd czasu kompilacji
                   eval { $answer = };

                   # błąd czasu działania
                   eval '$answer =';   # ustawia $@

               Używając  postaci  eval{}  jako  pułapki  na  wyjątki  w  bibliotekach,  możesz  nie życzyć sobie
               uruchamiania haków __DIE__, które mógł sobie ustawić użytkownik. Dla tego celu można  wykorzystać
               konstrukcję local $SIG{__DIE__}. Przykład:

                   # bardzo prywatna pułapka na wyjątek dzielenia przez zero
                   eval { local $SIG{'__DIE__'}; $answer = $a / $b; }; warn $@ if $@;

               Jest  to  szczególnie  istotne,  gdyż  haki  __DIE__  mogą  wywoływać die() ponownie, co ma efekt
               zmieniania komunikatów o błędach:

                   # haki __DIE__ mogą modyfikować komunikaty o błędach
                   {
                      local $SIG{'__DIE__'} = sub { (my $x = $_[0]) =~ s/foo/bar/g; die $x };
                      eval { die "foo foofs here" };
                      print $@ if $@;                # drukuje "bar barfs here"
                   }

               Używając eval(), powinieneś szczególnie uważać, by pamiętać na co się patrzy gdy:

                   eval $x;            # PRZYPADEK 1
                   eval "$x";          # PRZYPADEK 2

                   eval '$x';          # PRZYPADEK 3
                   eval { $x };        # PRZYPADEK 4

                   eval "\$$x++"       # PRZYPADEK 5
                   $$x++;              # PRZYPADEK 6

               Przypadki 1 i 2 zachowują się  jednakowo:  uruchamiają  kod,  zawarty  w  zmiennej  $x.  (Chociaż
               przypadek  2  ma ogłupiające cudzysłowy, powodujące, że czytelnik zastanawia się, co jeszcze może
               się zdarzyć (nic nie może).)  Przypadki 3 i 4 zachowują się  podobnie:  wykonują  one  kod  '$x',
               który  nie  robi  nic  poza  zwróceniem  wartości  $x.  (Przypadek 4 jest preferowany ze względów
               estetycznych, ma też zaletę kompilowania podczas kompilacji, a nie podczas działania.)  Przypadek
               5  jest  miejscem,  gdzie  normalnie  chciałbyś  użyć  cudzysłowów, poza tym, że w tej konkretnej
               sytuacji można użyć po prostu symbolicznych referencji. Jest tak w przypadku 6.

       exec LISTA
               Funkcja exec() wykonuje komendę systemową i NIGDY NIE POWRACA, chyba że komenda  nie  istnieje  i
               jest  wykonywana  bezpośrednio,  zamiast  przez /bin/sh -c (patrz niżej).  Jeśli chcesz powrócić,
               użyj zamiast exec() instrukcji system().

               Jeśli w LIŚCIE jest więcej niż jeden argument, lub jeśli jest  to  tablica  z  więcej  niż  jedną
               wartością,  wywoływany  jest  execvp(3) (z argumentami z LISTY).  Jeśli jest tylko jeden argument
               skalarny, to jest on sprawdzany w poszukiwaniu metaznaków powłoki.  Jeśli są tam jakieś znaki, to
               cały argument jest przekazywany  do  przetworzenia  przez  /bin/sh  -c.   Jeśli  nie  ma  żadnych
               metaznaków,  to argument jest dzielony na słowa i przekazywany bezpośrednio do execvp(3), co jest
               bardziej efektywne.  Uwaga: exec() i system() nie opróżniają  twojego  bufora  wejściowego,  więc
               możliwe, że aby zapobiec utracie wyjścia, będziesz musiał ustawić $⎪.  Przykłady:

                   exec '/bin/echo', 'Twoimi argumentami są: ', @ARGV;
                   exec "sort $outfile ⎪ uniq";

               Jeśli  tak  naprawdę  nie potrzebujesz wywołać pierwszego argumentu, lecz chcesz oszukać program,
               który wykonujesz co do jego nazwy, to możesz podać program, który  chcesz  wywołać  jako  "obiekt
               niebezpośredni"  (bez  przecinka) na samym początku LISTY. (Wymusza to zawsze interpretację LISTY
               jako listy wielowartościowej, nawet jeśli jest tam tylko pojedynczy skalar.) Przykład:

                   $shell = '/bin/csh';
                   exec $shell '-sh';          # udaj, że to powłoka loginowa

               lub, bardziej bezpośrednio,

                   exec {'/bin/csh'} '-sh';    # udaj, że to powłoka loginowy

       exists WYRAŻ
               Zwraca TRUE, jeśli podany  klucz  asocjacyjny  istnieje  w  tablicy  asocjacyjnej.  Wartość  jest
               prawdziwa nawet gdy odpowiadająca kluczowi wartość jest niezdefiniowana.

                   print "Istnieje\n" if exists $array{$key};
                   print "Zdefiniowany\n" if defined $array{$key};
                   print "Prawdziwy\n" if $array{$key};

               Element  asocjacyjny  może być prawdziwy tylko wtedy, gdy jest zdefiniowany, a zdefiniowany jeśli
               istnieje, lecz odwrotna kolejność niekoniecznie jest prawdziwa.

               Zauważ, że WYRAŻ może być skomplikowany tak daleko, dopóki ostateczna operacja jest  podejrzeniem
               klucza asocjacyjnego:

                   if (exists $ref->[$x][$y]{$key}) { ... }

       exit WYRAŻ
               Wykonuje  WYRAŻ  i kończy pracę z tą wartością. (W rzeczywistości, wywołuje najpierw zdefiniowane
               procedury END, lecz procedury te mogą przerwać kończenie. Podobnie, również przed wyjściem wołane
               są wszelkie destruktory obiektów.) Przykład:

                   $ans = <STDIN>;
                   exit 0 if $ans =~ /^[Xx]/;

               Zobacz też die(). Jeśli  WYRAŻ  jest  pominięte,  to  praca  kończy  się  statusem  0.  Jedynymi,
               uniwersalnymi  i  przenośnymi  wartościami WYRAŻ są 0 dla sukcesu i 1 dla błędu; wszelkie inne są
               podstawą do dziwnych interpretacji, zależnych od środowiska, w którym program jest uruchomiony.

               Nie powinieneś używać exit() do przerywania podprocedury, jeśli istnieje szansa, że  ktoś  mógłby
               chcieć  ustawić  pułapkę  na  błąd.  Zamiast  tego  użyj die(), który może być przechwycony przez
               eval().

       exp WYRAŻ

       exp     Zwraca e (naturalna podstawa logarytmu) do potęgi  WYRAŻ.  Jeśli  WYRAŻ  jest  pominięte,  zwraca
               exp($_).

       fcntl UCHWYTPLIKU,FUNKCJA,SKALAR
               Implementuje funkcję fcntl(2). Przypuszczalnie będziesz musiał zaznaczyć

                   use Fcntl;

               aby  móc  się nią posługiwać. Przetwarzanie argumentów i zwracanie wartości działa zupełnie jak w
               ioctl(), opisanym niżej. Zauważ, że  fcntl()  da  błąd  krytyczny  po  użyciu  na  maszynie,  nie
               implementującej fcntl(2). Na przykład:

                   use Fcntl;
                   fcntl($filehandle, F_GETLK, $packed_return_buffer);

       fileno UCHWYTPLIKU
               Zwraca  deskryptor  pliku  dla  uchwytu  pliku.  Jest  to  przydatne dla konstruowania bitmap dla
               select(). Jeśli UCHWYTPLIKU jest wyrażeniem, to jego wartość brana jest za nazwę uchwytu pliku.

       flock UCHWYTPLIKU,OPERACJA
               Wywołuje flock(2), lub emuluje go dla uchwytu UCHWYTPLIKU.  Zwraca  TRUE  po  sukcesie,  FALSE  w
               wypadku  jakiegoś  problemu. Na maszynach nie implementujących blokowania flock(2), fcntl(2), lub
               lockf(3), powoduje błąd krytyczny.   flock()  jest  przenośnym  perlowym  interfejsem  blokowania
               plików, choć blokuje tylko całe pliki, a nie rekordy.

               OPERACJA  jest  jedną z LOCK_SH, LOCK_EX, lub LOCK_UN. Możliwa jest jeszcze kombinacja z LOCK_NB.
               Stałe te mają tradycyjne wartości 1,  2,  8  i  4,  lecz  możesz  używać  nazw  symbolicznych  po
               zaimportowaniu  ich  z  modułu  Fcntl,  robiąc  to  albo  pojedynczo, albo grupowo, używając tagu
               ':flock' .  LOCK_SH żąda blokady dzielonej, LOCK_EX żąda blokady na wyłączność, a LOCK_UN zwalnia
               poprzednio zażądaną blokadę. Jeśli do LOCK_SH lub LOCK_EX dodany zostanie LOCK_NB, to  flock  nie
               będzie  blokował,  oczekując na zablokowanie, lecz zakończy działanie natychmiast (aby dowiedzieć
               się, czy uzyskałeś blokadę, sprawdź status wyjścia).

               Aby zapobiec prawdopodobnie dekoordynacji, perl opróżnia UCHWYTPLIKU przed jego (od)blokowaniem.

               Zauważ, że emulacja zbudowana za  pomocą  lockf(3)  nie  daje  blokad  dzielonych  i  wymaga,  by
               UCHWYTPLIKU  był  otwarty  z  zamiarem  zapisu.   Jest to semantyka, którą implementuje lockf(3).
               Większość (wszystkie?) systemów jednak implementuje lockf(3)  na  zasadach  blokowania  fcntl(2),
               więcej różnice nie powinny się dawać we znaki.

               Zauważ  też,  że  niektóre  wersje flock() nie mogą blokować rzeczy poprzez sieć; będziesz musiał
               użyć  do tego bardziej specyficznego dla systemu fcntl(). Jeśli chcesz, możesz  zmusić  perla  do
               ignorowania  systemowej funkcji flock(2) i używać jego własnej, opartej o fcntl(2) emulacji. Robi
               się to, podając programowi Configure przełącznik -Ud_flock. Trzeba to oczywiście  zrobić  podczas
               konfigurowania perla jako takiego.

               Oto doklejacz mailboxa dla systemów BSD.

                   use Fcntl ':flock'; # importuj stałe LOCK_*

                   sub lock {
                       flock(MBOX,LOCK_EX);
                       # a w wypadku, gdyby ktoś dokleił
                       # podczas naszego oczekiwania...
                       seek(MBOX, 0, 2);
                   }

                   sub unlock {
                       flock(MBOX,LOCK_UN);
                   }

                   open(MBOX, ">>/usr/spool/mail/$ENV{'USER'}")
                           or die "Nie mogę otworzyć mailboxa!: $!";

                   lock();
                   print MBOX $msg,"\n\n";
                   unlock();

               Zobacz też stronę podręcznika. Są tam inne przykłady  flock().

       fork    Wykonuje  wywołanie  systemowe  fork(2).  Zwraca procesowi rodzicielskiemu pid dziecka, a w wątku
               dziecka zwraca zero. W wypadku  błędu,  zwraca  undef.   Uwaga:  nieopróżnione  bufory  pozostają
               nieopróżnione w obydwu procesach, co znaczy, że będziesz musiał ustawić $⎪ ($AUTOFLUSH w English)
               lub wywołać metodę autoflush() z IO::Handle aby zapobiec duplikacji wyjścia.

               Jeśli fork()'ujesz bez czekania na dzieci, zbierzesz zombies.  (Osierocone procesy.)

                   $SIG{CHLD} = sub { wait };

               Istnieje też trik podwójnego forka (sprawdzanie błędów forka zostało pominięte);

                   unless ($pid = fork) {
                       unless (fork) {
                           exec "co naprawdę chcesz robić";
                           die "bez exec";
                           # ... or ...
                           ## (jakiś_kod_perla)
                           exit 0;
                       }
                       exit 0;
                   }
                   waitpid($pid,0);

               Zobacz  też  stronę  podręcznika  perlipc(1).  Są  tam  dalsze  przykłady  forkowania i zbierania
               konających dzieci.

               Zauważ, że jeśli twoje forkowane dziecko dziedziczy systemowe deskryptory plików, takie jak STDIN
               i STDOUT, które  w  rzeczywistości  są  połączone  potokiem  lub  gniazdem,  to  jeśli  skończysz
               działanie,  zdalny  serwer  (taki  jak httpd, rsh) nie będzie myślał, że rzeczywiście skończyłeś.
               Powinieneś je otworzyć na nowo na /dev/null.

       format  Zadeklaruj format obrazka, używanego z funkcją write(). Na przykład:

                   format Something =
                       Test: @<<<<<<<< @⎪⎪⎪⎪⎪ @>>>>>
                             $str,     $%,    '$' . int($num)
                   .

                   $str = "widget";
                   $num = $cost/$quantity;
                   $~ = 'Something';
                   write;

               Dla dalszych opisów i przykładów, zobacz stronę perlform(1).

       formline OBRAZEK,LISTA
               Jest to funkcja wewnętrzna, używana przez formaty. Można  ją  jednak  wywołać  też  samodzielnie.
               Formatuje  ona  (zobacz  stronę  perlform(1))  listę  wartości  zależnie  od  zawartości OBRAZKA,
               umieszczając  wyjście  w  akumulatorze  wyjścia  formatowego,  $^A  ($ACCUMULATOR   w   English).
               Ostatecznie,  po  dokonaniu  write(),  zawartość  $^A  jest zapisywana do jakiegoś uchwytu pliku.
               Możesz jednak odczytać go samodzielnie i ustawić na "".  Zauważ,  że  format  zazwyczaj  wykonuje
               jeden  formline()  na  każdą  linię formy, lecz sama funkcja fromline nie zwraca uwagi na to, ile
               nowych linii jest osadzonych w OBRAZKU. Znaczy to, że tokeny ~ i ~~ będą traktować  cały  OBRAZEK
               jako   linię   pojedynczą.   Możesz  więc  być  zmuszonym  do  używania  wielu  linii  form,  aby
               zaimplementować pojedynczy format zapisu, podobnie jak kompilator format.

               Uważaj, jeśli wstawiasz wokół obrazka podwójne cudzysłowy--znak "@" może być wzięty  za  początek
               nazwy tablicy.  formline() zawsze zwraca TRUE. Zobacz stronę perlform(1) dla dalszych przykładów.

       getc UCHWYTPLIKU

       getc    Zwraca  następny  znak  z  pliku  wejściowego, identyfikowanego przez UCHWYTPLIKU. Na końcu pliku
               zwraca łańcuch null. Jeśli UCHWYTPLIKU zostanie pominięty, odczyt następuje ze STDIN.   Nie  jest
               to  efektywne.  Nie  może  być używane do pobierania niebuforowanych pojedynczych znaków. Do tego
               celu spróbuj raczej czegoś w rodzaju:

                   if ($BSD_STYLE) {
                       system "stty cbreak </dev/tty >/dev/tty 2>&1";
                   }
                   else {
                       system "stty", '-icanon', 'eol', "\001";
                   }

                   $key = getc(STDIN);

                   if ($BSD_STYLE) {
                       system "stty -cbreak </dev/tty >/dev/tty 2>&1";
                   }
                   else {
                       system "stty", 'icanon', 'eol', '^@'; # ASCII null
                   }
                   print "\n";

               Określenie, czy $BSD_STYLE powinno być ustawione, pozostawiamy jako ćwiczenie dla czytelnika.

               Na systemach, kompatybilnych  z   POSIX,  bardziej  przenośna  do  tego  celu  może  być  funkcja
               POSIX::getattr().   Zobacz  też moduł Term::ReadKey z najbliższego mirrora CPAN; szczegóły o CPAN
               można znaleźć we wpisie CPAN ze strony podręcznika perlmod(1).

       getlogin
               Zwraca bieżący login z /etc/utmp. (o ile istnieje.)  W wypadku nulla, użyj getpwuid().

                   $login = getlogin ⎪⎪ getpwuid($<) ⎪⎪ "Kilroy";

               Nie wykorzystuj getlogin() do autentykacji: nie jest tak bezpieczny jak getpwuid().

       getpeername GNIZADO
               Zwraca spakowany adres sockaddr drugiego końca z połączenia na GNIEŹDZIE.

                   use Socket;
                   $hersockaddr    = getpeername(SOCK);
                   ($port, $iaddr) = unpack_sockaddr_in($hersockaddr);
                   $herhostname    = gethostbyaddr($iaddr, AF_INET);
                   $herstraddr     = inet_ntoa($iaddr);

       getpgrp PID
               Zwraca bieżącą grupę procesu dla  podanego  PIDa.  Aby  uzyskać  grupę  bieżącego  procesu,  użyj
               wartości  PID  równej  zero.   Użycie  tej  funkcji  na  maszynie, nie implementującej getpgrp(2)
               podniesie wyjątek. Jeśli parametr PID  zostanie  pominięty,  to  zwracana  jest  grupa  bieżącego
               procesu.  Zauważ,  że  wersja  POSIX getpgrp nie przyjmuje argumentu PID, więc naprawdę przenośna
               jest tylko konstrukcja PID==0.

       getppid Zwraca identyfikator procesu rodzicielskiego.

       getpriority CZYJE,KTO
               Zwraca bieżący priorytet procesu, grupy procesów, lub  użytkownika.  (Zobacz  stronę  podręcznika
               getpriority(2).)   Użycie  tej  funkcji  na maszynie nie implementującej getpriority(2) podniesie
               wyjątek krytyczny.

       getpwnam NAZWA

       getgrnam NAZWA

       gethostbyname NAZWA

       getnetbyname NAZWA

       getprotobyname NAZWA

       getpwuid UID

       getgrgid GID

       getservbyname NAZWA,PROTO

       gethostbyaddr ADR,TYPADRESU

       getnetbyaddr ADR,TYPADRESU

       getprotobynumber LICZBA

       getservbyport PORT,PROTO

       getpwent

       getgrent

       gethostent

       getnetent

       getprotoent

       getservent

       setpwent

       setgrent

       sethostent STAYOPEN

       setnetent STAYOPEN

       setprotoent STAYOPEN

       setservent STAYOPEN

       endpwent

       endgrent

       endhostent

       endnetent

       endprotoent

       endservent
               Funkcje te dokonują tych samych akcji, co ich odpowiedniki z biblioteki systemowej. W  kontekście
               listowym, wartości zwracane różnych funkcji `get' są następujące:

                   ($nazwa,$hasło,$uid,$gid,
                      $quota,$komentarz,$gcos,$katalog,$shell) = getpw*
                   ($nazwa,$hasło,$gid,$członkowie) = getgr*
                   ($nazwa,$aliasy,$typadresu,$długość,@addrs) = gethost*
                   ($nazwa,$aliasy,$typadresu,$sieć) = getnet*
                   ($nazwa,$aliasy,$protokół) = getproto*
                   ($nazwa,$aliasy,$port,$protokół) = getserv*

               (Jeśli wpis nie istnieje, dostaniesz listę null.)

               W  kontekście  skalarnym, dostajesz nazwę. Wyjątkiem jest funkcja podglądania według nazwy, gdzie
               dostajesz inną rzecz, jaką by ona nie  była.   (Jeśli  wpis  nie  istnieje,  otrzymujesz  wartość
               niezdefiniowaną.)  Na przykład:

                   $uid = getpwnam
                   $nazwa = getpwuid
                   $nazwa = getpwent
                   $gid = getgrnam
                   $nazwa = getgrgid
                   $nazwa = getgrent
                   itd.

               Wartość  $członkowie,  zwracana  przez  getgr*()  to  oddzielona  spacjami  lista nazw loginowych
               członków grupy.

               Jeśli w C obsługiwana  jest  zmienna  errno,  to  dla  funkcji  gethost*()  jego  wartość  będzie
               przekazywana  przez  $?.  Wartość  @addrs, zwracana przez wykonane wywołanie, jest listą czystych
               (raw) adresów, zwróconych przez odpowiednie wywołanie systemowe. W  domenie  internetowej,  każdy
               adres jest czterobajtowy, a rozpakować go możesz, mówiąc coś w rodzaju:

                   ($a,$b,$c,$d) = unpack('C4',$addr[0]);

       getsockname GNIAZDO
               Zwraca spakowany adres sockaddr tego końca połączenia na GNIEŹDZIE.

                   use Socket;
                   $mysockaddr = getsockname(SOCK);
                   ($port, $myaddr) = unpack_sockaddr_in($mysockaddr);

       getsockopt GNIAZDO,POZIOM,NAZWAOPCJI
               Zwraca zażądaną opcję gniazda, lub wartość niezdefiniowaną w wypadku błędu.

       glob WYRAŻ

       glob    Zwraca  wartość  WYRAŻ z rozwinięciami nazwy plików, takimi jakich dokonałaby powłoka. Funkcja ta
               jest wewnętrzną funkcją implementującą operator <*.c>, lecz możesz jej użyć  bezpośrednio.  Jeśli
               pominięte zostanie WYRAŻ, to używane będzie $_.  Operator <*.c> jest omówiony bliżej w sekcji I/O
               Operators na stronie perlop(1).

       gmtime WYRAŻ
               Konwertuje  czas zwrócony przez funkcję time do 9 elementowej tablicy, w której znajduje się czas
               zlokalizowany do standardowej strefy Greenwich.  Zazwyczaj jest to używane następująco:

                   #  0    1    2     3     4    5     6     7     8
                   ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) =
                                                           gmtime(time);

               Wszystkie elementy tablicy są numeryczne i pochodzą wprost ze struktury tm.  Ogólnie  znaczy  to,
               że  $mon  ma  zakres  0..11,  a  $wday 0..6, z niedzielą kryjącą się pod 0. Dodatkowo, $year jest
               liczbą lat od 1900, a nie po prostu dwiema ostatnimi cyframi roku.

               Jeśli WYRAŻ jest pominięte, wykonuje gmtime(time()).

               W kontekście skalarnym, zwraca wartość ctime(3):

                   $now_string = gmtime;  # np. "Thu Oct 13 04:54:34 1994"

               Zobacz też funkcję timegm(), udostępnianą przez moduł Time::Local, a także  funkcję  strftime(3),
               dostępną przez moduł POSIX.

       goto ETYKIETA

       goto WYRAŻ

       goto &NAZWA
               Postać  goto-ETYKIETA  szuka  instrukcji,  oznaczonej  przez  ETYKIETA  i kontynuuje działanie od
               tamtego miejsca. Nie może być używane do przechodzenia do konstrukcji, wymagającej inicjalizacji,
               takiej jak podprocedura czy  pętla  foreach.  Nie  może  też  być  używane  do  przechodzenia  do
               konstrukcji optymalizowanej, lub do wychodzenia z bloku, lub podprocedury, przekazanej do sort().
               Można  nim natomiast przeskoczyć prawie we wszystkie inne miejsca zakresu dynamicznego, włączając
               wychodzenie z podprocedur, choć w tym wypadku lepiej użyć innej konstrukcji, takiej jak last  lub
               die.  Autor  perla  nigdy  nie czuł potrzeby używania tej postaci goto (tzn. w perlu--C jest inną
               sprawą).

               Postać goto-WYRAŻ oczekuje nazwy etykiety, której zakres może być rozwiązany dynamicznie. Pozwala
               to na obliczane goto per FORTRAN, lecz nie jest zbyt zalecane, jeśli optymalizujesz ze względu na
               łatwość konserwacji programu:

                   goto ("FOO", "BAR", "GLARCH")[$i];

               Postać goto-&NAZWA jest bardzo magiczna  i  podmienia  wywołanie  do  nazwanej  podprocedury  dla
               bieżącej  procedury.  Jest  to  używane  przez  podprocedury  AUTOLOAD,  które  chcą ładować inne
               podprocedury, a potem udawać, że ta inna podprocedura została wywołana jako pierwsza  (poza  tym,
               wszelkie zmiany @_ bieżącej podprocedury są przekazywane innej podprocedurze.) Po tym goto, nawet
               caller() nie będzie w stanie powiedzieć, że ta procedura była wywołana pierwsza.

       grep BLOK LISTA

       grep WYRAŻ,LISTA
               Jest  to  podobne duchowo, lecz nie identyczne do grep(1) i krewnych.  W rzeczywistości, nie jest
               ograniczone do używania wyrażeń regularnych.

               Wykonuje BLOK lub WYRAŻ dla każdego elementu LISTY (ustawiając lokalnie $_ na  każdy  element)  i
               zwracając listę wartości, składających się z tych, dla których wykonane wyrażenie było prawdziwe.
               W kontekście skalarnym, zwraca liczbę prawdziwych wyrażeń.

                   @foo = grep(!/^#/, @bar);    # Pozbądź się komentarzy

               lub równoważnie,

                   @foo = grep {!/^#/} @bar;    # pozbądź się komentarzy

               Zauważ,  że  skoro  $_  jest  referencją  do  wartości  listy,  może być używane do modyfikowania
               elementów tablicy.  Podczas  gdy  jest  to  przydatne  i  obsługiwane,  może  to  spowodować  też
               nieoczekiwane rezultaty, szczególnie w wypadku gdy LISTA nie jest nazwaną tablicą.

               Grep  zwraca  aliasy  do  oryginalnej listy. Znaczy to, że modyfikowanie elementu listy zwróconej
               przez to polecenie, modyfikuje też element listy oryginalnej.

       hex WYRAŻ

       hex     Interpretuje WYRAŻ jako łańcuch szesnastkowy i zwraca odpowiadającą mu  wartość.  (Dla  konwersji
               łańcuchów,  które  mogą  się  zaczynać od 0, lub 0x, zobacz opis oct, znajdujący się gdzieś w tym
               dokumencie.) Jeśli WYRAŻ zostanie pominięte, to używane jest $_.

                   print hex '0xAf'; # drukuje '175'
                   print hex 'aF';   # to samo

       import  Nie istnieje wbudowana funkcja import.  Jest  to  zwyczajna  metoda  (podprocedura),  definiowana
               (dziedziczona)  przez  moduły,  które życzą sobie eksportować nazwy do kolejnych modułów. [potem]
               funkcja use() woła metodę import() dla używanego pakietu. Zobacz  jeszcze  opis  use()  i  stronę
               perlmod(1) oraz stronę Exporter.

       index STR,SUBSTR,POZYCJA

       index STR,SUBSTR
               Zwraca pozycję pierwszego pojawienia się SUBSTR w łańcuchu STR.  Jeśli POZYCJA jest pominięta, to
               przeszukiwanie  rozpoczyna  się od początku łańcucha. Wartość zwracana jest oparta o 0 (lub tego,
               na co  ustawisz  zmienną  $[  --lecz  lepiej  tego  nie  rób).  Jeśli  podciąg  nie  może  zostać
               zlokalizowany, zwracana jest podstawa - 1, czyli normalnie -1.

       int WYRAŻ

       int     Zwraca część całkowitą z WYRAŻ. Jeśli WYRAŻ jest pominięte, używane jest $_.

       ioctl UCHWYTPLIKU,FUNKCJA,SKALAR
               Implementuje funkcję ioctl(2). Przypuszczalnie aby jej używać, będziesz musiał powiedzieć

                   require "ioctl.ph"; # przypuszczalnie w /usr/local/lib/perl/ioctl.ph

               Jeśli  ioctl.ph  nie  istnieje,  lub  nie  ma  właściwych  definicji, będziesz musiał użyć swojej
               własnej, opartej na nagłówkach C, takich jak <sys/ioctl.h>.   (Istnieje  skrypt  perla  o  nazwie
               h2ph(1),  która  pomaga  w  konwersji,  lecz  jest to nietrywialna sprawa.) SKALAR jest wartością
               zapisywaną, lub odczytywaną, zależnie od FUNKCJI--wskaźnik do wartości łańcuchowej SKALARA będzie
               przekazany jako trzeci argument  właściwego  wywołania  ioctl.  (Jeśli  SKALAR  nie  ma  wartości
               łańcuchowej, lecz ma numeryczną, to zostanie przekazana ta wartość zamiast wskaźnika do łańcucha.
               Aby  zapewnić,  że  będzie  to  prawdziwe, przed użyciem dodaj do skalara 0). Do manipulowania na
               wartościach  struktur,  używanych  przez  ioctl()  przydatne  są  funkcje  pack()   i   unpack().
               Następujący przykład ustawia znak kasowania na DEL.

                   require 'ioctl.ph';
                   $getp = &TIOCGETP;
                   die "NO TIOCGETP" if $@ ⎪⎪ !$getp;
                   $sgttyb_t = "ccccs";                # 4 znaki i short
                   if (ioctl(STDIN,$getp,$sgttyb)) {
                       @ary = unpack($sgttyb_t,$sgttyb);
                       $ary[2] = 127;
                       $sgttyb = pack($sgttyb_t,@ary);
                       ioctl(STDIN,&TIOCSETP,$sgttyb)
                           ⎪⎪ die "Nie mogę wykonać ioctl: $!";
                   }

               Wartość zwracana ioctl (i fcntl) jest następująca:

                       gdy OS zwraca:          to Perl zwraca:
                           -1               wartość niezdefiniowaną
                            0                łańcuch "0 but true"
                        coś innego                 to samo

               Tak  więc,  mimo  że  perl zwraca po sukcesie TRUE, a w wypadku niepowodzenia FALSE, możesz łatwo
               określić rzeczywistą wartość zwróconą przez system operacyjny:

                   ($retval = ioctl(...)) ⎪⎪ ($retval = -1);
                   printf "System zwrócił %d\n", $retval;

       join WYRAŻ,LISTA
               Łączy osobne łańcuchy LISTY w pojedynczy łańcuch, w którym pola są rozdzielone wartościami WYRAŻ.
               Zwraca ten łańcuch.  Przykład:

                   $_ = join(':', $login,$passwd,$uid,$gid,$gcos,$home,$shell);

               Zobacz też opis split.

       keys HASH
               Zwraca normalna tablicę, składającą się z wszystkich kluczy  nazwanej  tablicy  asocjacyjnej.  (W
               kontekście skalarnym, zwraca liczbę kluczy.) Klucze są zwracane w dość losowej kolejności, lecz w
               tej samej, w której swoje wartości produkują funkcje values() i each() (o ile tablica asocjacyjna
               nie była [w międzyczasie] zmieniana).  W efekcie ubocznym, funkcja resetuje iterator tablicy.

               A oto jeszcze inny sposób na wydrukowanie środowiska:

                   @keys = keys %ENV;
                   @values = values %ENV;
                   while ($#keys >= 0) {
                       print pop(@keys), '=', pop(@values), "\n";
                   }

               a co, jeśli by je posortować według klucza:

                   foreach $key (sort(keys %ENV)) {
                       print $key, '=', $ENV{$key}, "\n";
                   }

               Aby  posortować  tablicę  według  wartości,  będziesz  musiał  użyć  funkcji sort. Oto numeryczne
               posortowanie tablicy asocjacyjnej według jej wartości:

                   foreach $key (sort { $hash{$b} <=> $hash{$a} } keys %hash)) {
                       printf "%4d %s\n", $hash{$key}, $key;
                   }

               Jako lwartość, keys umożliwia zwiększanie liczby komórek asocjacyjnych, zaalokowanych  dla  danej
               tablicy  asocjacyjnej. Możesz zyskać na efektywności, jeśli tablica ma być duża. (Jest to podobne
               do pre-rozszerzania tablicy przez przeznaczanie $#array większego numeru.)  Jeśli powiesz

                   keys %hash = 200;

               to %hash będzie  miał co najmniej 200 zaalokowanych komórek. Komórki te będą  utrzymywane  nawet,
               jeśli  zrobisz  %hash  =  ().  Jeśli  chcesz  zwolnić  zasób  wewnątrz zakresu, użyj undef %hash.
               Korzystając z powyższej właściwości, zawsze można zmniejszyć liczbę zaalokowanych komórek.

       kill LISTA
               Wysyła sygnał do listy procesów. Pierwszy element listy musi być  nazwą  sygnału.  Zwraca  liczbę
               procesów, do których udało się przesłać sygnał.

                   $cnt = kill 1, $child1, $child2;
                   kill 9, @goners;

               W  przeciwieństwie  do zachowania w powłoce, w perlu jeśli -1SYGNAŁ jest ujemny, to killuje grupy
               procesów, zamiast procesów. (W Systemie V, ujemny numer PROCESU odnosi się też do grup  procesów,
               lecz nie jest to przenośne.) Oznacza to, że zazwyczaj chcesz przekazywać sygnały dodatnie. Możesz
               też używać nazw sygnałów w cudzysłowach. Zobacz jeszcze sekcję Signals w podręczniku perlipc(1).

       last ETYKIETA

       last    Komenda  last  jest podobna do instrukcji break z C (używanej w pętlach); przerywa natychmiastowo
               pętlę. Jeśli pominięty jest parametr ETYKIETY, to komenda odnosi się do  najbardziej  wewnętrznej
               pętli zamykającej. Potencjalna instrukcja bloku continue nie jest wykonywana:

                   LINE: while (<STDIN>) {
                       last LINE if /^$/;      # zakończ po skończeniu z nagłówkiem
                       ...
                   }

       lc WYRAŻ

       lc      Zwraca WYRAŻ w małych literach. Jest to wewnętrzna funkcja, implementująca escape \L w łańcuchach
               ujętych w cudzysłowy. Jeśli włączone jest use locale, to szanuje bieżące locale LC_CTYPE.  Zobacz
               stronę podręcznika perllocale(1).

               Jeśli WYRAŻ jest pominięte, używane jest $_.

       lcfirst WYRAŻ

       lcfirst Zwraca  wartość  WYRAŻ,  w  którym  pierwszy  znak  jest  zastąpiony małą literą. Jest to funkcja
               wewnętrzna, implementująca escape \l w łańcuchach ujętych w podwójne cudzysłowy.  Jeśli  włączone
               jest use locale, to szanuje bieżące locale LC_CTYPE. Zobacz stronę podręcznika perllocale(1).

               Jeśli WYRAŻ jest pominięte, używane jest $_.

       length WYRAŻ

       length  Zwraca długość w znakach wartości WYRAŻ. Jeśli WYRAŻ jest pominięte, zwracana jest długość $_.

       link STARYPLIK,NOWYPLIK
               Tworzy  nową  nazwę  pliku, dowiązaną do starej nazwy pliku. Po sukcesie zwraca 1, a w przeciwnym
               wypadku 0.

       listen GNIAZDO,ROZMIARKOLEJKI
               Robi to samo, co wywołanie systemowe listen(2). Zwraca TRUE po sukcesie, a w  przeciwnym  wypadku
               FALSE. Zobacz przykład w sekcji Sockets: Client/Server Communication w podręczniku perlipc(1).

       local WYRAŻ
               Local  modyfikuje  wymienione  zmienne  tak, że są lokalne w otaczającym je bloku, podprocedurze,
               eval{}, lub do. Jeśli wymieniona jest więcej niż jedna wartość, to lista musi być  umieszczona  w
               nawiasach. Zobacz sekcję Temporary Values via local() w podręczniku perlsub(1).

               Zamiast  local(),  często  raczej  wolałbyś użyć my(), gdyż to pierwsze tak naprawdę nie jest tym
               czym się większości ludzi wydaje.  Odsyłam do sekcji Private Variables  via  my()  w  podręczniku
               perlsub(1).

       localtime WYRAŻ
               Konwertuje  czas,  zwrócony  przez  funkcję  time  na  9-elementową  tablicę,  której  czas  jest
               zanalizowany dla lokalnej strefy czasowej. Zazwyczaj jest to używane następująco:

                   #  0    1    2     3     4    5     6     7     8
                   ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) =
                                                               localtime(time);

               Wszystkie elementy tablicy są numeryczne i pochodzą wprost ze  struktury  tm.   W  rzeczywistości
               znaczy to, że $mon ma zasięg 0..11, a $wday 0..6, gdzie 0 oznacza niedzielę. Poza tym, $year jest
               liczbą lat ot 1900 roku, tj. rok 123 oznacza 2023.

               Jeśli WYRAŻ zostanie pominięte, to używany jest czas bieżący (localtime(time)).

               W kontekście skalarnym, zwraca wartość ctime(3):

                   $now_string = localtime;  # np., "Thu Oct 13 04:54:34 1994"

               Zobacz też moduł Time::Local i funkcje  strftime(3) i mktime(3), dostępne przez moduł POSIX.

       log WYRAŻ

       log     Zwraca logarytm (podstawa e) z WYRAŻ. Jeśli WYRAŻ jest pominięte, zwraca wartość dla $_.

       lstat UCHWYTPLIKU

       lstat WYRAŻ

       lstat   Robi  to  samo, co funkcja stat(), lecz zamiast plików, na które wskazują dowiązania symboliczne,
               testuje same dowiązania. Jeśli twój system nie obsługuje dowiązań symbolicznych, dokonywany  jest
               zwykły stat().

               Jeśli WYRAŻ jest pominięte, używane jest $_.

       m//     Operator porównania. Zobacz stronę perlop(1).

       map BLOK LISTA

       map WYRAŻ,LISTA
               Analizuje  BLOK  lub WYRAŻ dla każdego elementu LISTY (ustawiając lokalnie $_ na każdy element) i
               zwraca wartość listową, złożoną z wyników każdego analizowania. BLOK lub WYRAŻ jest analizowany w
               kontekście listowym, więc każdy element LISTY może  dać  zero,  jeden,  lub  więcej  elementów  w
               wartości zwracanej.

                   @chars = map(chr, @nums);

               tłumaczy listę liczb na odpowiadające im znaki. A

                   %hash = map { getkey($_) => $_ } @array;

               jest tylko śmiesznym sposobem zapisania

                   %hash = ();
                   foreach $_ (@array) {
                       $hash{getkey($_)} = $_;
                   }

       mkdir NAZWAPLIKU,PRAWA
               Tworzy  katalog,  podany  jako  NAZWAPLIKU, którego prawa są określone przez PRAWA (zmodyfikowane
               przez umaskę). Jeśli operacja zakończy się sukcesem, zwraca 1, w przeciwnym wypadku  zwraca  0  i
               ustawia $!  (errno).

       msgctl ID,CMD,ARG
               Woła  funkcję IPC msgctl(2) z Systemu V. Jeśli CMd jest &IPC_STAT, to ARG musi być zmienną, która
               będzie przechowywać zwróconą strukturę msquid_ds. Wartość zwracana tej funkcji  jest  podobna  do
               ioctl:  dla  błędu  wartość  niezdefiniowana,  "0  but  true"  dla zera, oraz rzeczywista wartość
               zwracana dla innych wypadków.

       msgget KLUCZ,FLAGI
               Woła funkcję IPC msgget(2) z Systemu V. Zwraca identyfikator  kolejki  komunikatów,  lub  wartość
               niezdefiniowaną (w wypadku błędu).

       msgsnd ID,MSG,FLAGI
               Woła  funkcję  IPC msgsnd(2) z Systemu V, która przesyła komunikat MSG do kolejki komunikatów ID.
               MSG musi zaczynać się wartością  long  int,  określającą  typ,  którą  można  utworzyć  z  pomocą
               pack("l",$typ).  Zwraca TRUE po sukcesie i FALSE w wypadku błędu.

       msgrcv ID,VAR,ROZMIAR,TYP,FLAGI
               Woła  funkcję  IPC  msgrcv(2)  z  Systemu V. Funkcja odbiera komunikat z kolejki komunikatów ID i
               zapisuje go do zmiennej VAR.  Maksymalna odbierana wiadomość ma wielkość ROZMIAR. Zauważ, że  gdy
               wiadomość jest odbierana, to jej typ będzie pierwszą rzeczą, lądującą w VAR, a maksymalna długość
               VAR  to  ROZMIAR  plus rozmiar typu komunikatu. Zwraca TRUE po sukcesie, a FALSE w wypadku błędu.
               [przyp.tłum.: pole TYPE generalnie w  IPC  oznacza  typ,  zdefiniowany  w  pierwszych  4  bajtach
               komunikatu]

       my WYRAŻ
               Instrukcja  "my"  deklaruje  wymienione zmienne jako lokalne dla zamkniętego bloku, podprocedury,
               eval lub pliku potraktowanego instrukcjami do/require/use.  Jeśli  wymieniono  więcej  niż  jedną
               wartość,  lista  musi  być  ujęta  w nawiasy.  Zobacz jeszcze sekcję Private Variables via my() w
               podręczniku perlsub(1).

       next ETYKIETA

       next    Komenda next jest podobna do instrukcji continue w C; rozpoczyna kolejną iterację pętli:

                   LINE: while (<STDIN>) {
                       next LINE if /^#/;      # pozbądź się komentarzy
                       ...
                   }

               Zauważ, że jeśli powyżej był blok continue, to zostałby on wykonany nawet na usuniętych  liniach.
               Jeśli argument ETYKIETY jest pominięty, komenda odnosi się do najbardziej wewnętrznej otaczającej
               pętli.

       no Module LISTA
               Zobacz funkcję "use", gdzie "no" jest przeciwieństwem.

       oct WYRAŻ

       oct     Interpretuje WYRAŻ jako łańcuch ósemkowy i zwraca odpowiadającą wartość. (Jeśli WYRAŻ zaczyna się
               od  0x,  jest  interpretowane  jako  łańcuch  szesnastkowy.)  Następujący  kod  obsługuje  liczby
               dziesiętne, ósemkowe i szesnastkowe w standardowej notacji perla lub C:

                   $val = oct($val) if $val =~ /^0/;

               Jeśli WYRAŻ jest pominięte, używa $_. Funkcja ta jest często używana gdy łańcuch w rodzaju  "644"
               musi  być np. przekonwertowany na prawa pliku. (Chociaż perl automatycznie konwertuje łańcuchy na
               liczby, zgodnie z potrzebami, to automatyczna konwersja zakłada podstawę 10.)

       open UCHWYTPLIKU,WYRAŻ

       open UCHWYTPLIKU
               Otwiera plik, którego nazwa jest przekazywana WYRAŻ, a następnie wiąże go z UCHWYTEMPLIKU.  Jeśli
               UCHWYTPLIKU jest wyrażeniem, to jego wartość jest używana jako nazwa rzeczywistego uchwytu pliku.
               Jeśli  WYRAŻ  jest  pominięte,  to  przyjmuje  się,  że  zmienna  skalarna  o tej samej nazwie co
               UCHWYTPLIKU zawiera nazwę pliku.   (Zauważ,  że  zmienne  leksykalne--te,  deklarowane  z  pomocą
               my--nie będą w ten sposób działały.)

               Jeśli  nazwa  pliku  rozpoczyna  się  od  '<'  lub  od  niczego,  plik jest otwierany dla wejścia
               (odczytu). Jeśli nazwa pliku rozpoczyna się od '>', plik jest kasowany i  otwierany  dla  zapisu.
               Jeśli  nazwa  pliku rozpoczyna się od '>>', plik jest otwierany dla dopisywania.  Jeśli przed '>'
               lub '<' postawisz '+', oznacza to, że chcesz zarówno czytać, jak i zapisywać do pliku. Tryb  '+<'
               jest  zazwyczaj  preferowany  dla  poprawek  odczytu/zapisu--tryb  '+>'  najpierw  pobiłby  plik.
               Przedrostek i nazwa pliku mogą być oddzielone  spacjami.  Wszystkie  te  przedrostki  odpowiadają
               trybom otwarcia funkcji fopen(3).

               Jeśli  nazwa pliku rozpoczyna się od "⎪", to plik jest rozumiany jako komenda, do której potokiem
               przesyłane jest wyjście. Odwrotnie, jeśli nazwa pliku kończy się tym  symbolem,  to  nazwa  pliku
               jest  interpretowana  jako  komenda,  której  wyjście  jest  przesyłane potokiem na nasze wejście
               (Zobacz sekcję Using open() for IPC w podręczniku perlipc(1)).  (Możesz nie mieć czystego open(),
               powodującego, że komenda jest zarówno potokiem wejściowym, jak i  wyjściowym.  Są  jednak  na  to
               rady, zobacz stronę podręcznika IPC::Open2, IPC::Open3, oraz sekcję Bidirectional Communication w
               podręczniku perlipc(1).)

               Otwieranie '-' otwiera strumień STDIN, a otwieranie '>-' otwiera STDOUT.  Open po sukcesie zwraca
               zero,  a  w  przeciwnym  wypadku  wartość  niezdefiniowaną.   Jeśli  open otworzył potok, wartość
               zwracana jest identyfikatorem podprocesu (pid).

               Jeśli masz na tyle pecha, że pracujesz z perlem na systemie,  który  odróżnia  pliki  tekstowe  i
               binarne  (nowoczesne  systemy  ich  nie  rozróżniają),  to powinieneś poczytać o funkcji binmode,
               opisanej gdzieś w tym dokumencie. Systemy, wymagające binmode  rozpoznaje  się  po  ich  formacie
               pliku  tekstowego.  Systemy takie, jak Unix i Plan9, które oddzielają linie pojedynczym znakiem i
               które kodują go w C jako "\n", nie potrzebują binmode.  Reszta tak.

               Przykłady:

                   $ARTICLE = 100;
                   open ARTICLE or die "Nie mogę znaleźć artykułu $ARTICLE: $!\n";
                   while (<ARTICLE>) {...

                   open(LOG, '>>/usr/spool/news/twitlog'); # (log jest zarezerwowany)

                   open(DBASE, '+<dbase.mine');            # otwórz dla odnowienia

                   open(ARTICLE, "caesar <$article ⎪");    # dekoduj artykuł

                   open(EXTRACT, "⎪sort >/tmp/Tmp$$");     # $$ jest pidem naszego procesu

                   # przetwórz listę argumentów plików, wraz z wszelkimi załącznikami

                   foreach $file (@ARGV) {
                       process($file, 'fh00');
                   }

                   sub process {
                       local($filename, $input) = @_;
                       $input++;               # jest to inkrementacja łańcuchowa
                       unless (open($input, $filename)) {
                           print STDERR "Nie mogę otworzyć $filename: $!\n";
                           return;
                       }

                       while (<$input>) {              # note use of indirection
                           if (/^#include "(.*)"/) {
                               process($1, $input);
                               next;
                           }
                           ...         # cokolwiek
                       }
                   }

               Możesz również, zgodnie z tradycją powłoki Bourne, podać  WYRAŻ,  zaczynający  się  od  ">&",  co
               oznacza,  że  reszta  łańcucha  jest  interpretowana  jako  nazwa uchwytu pliku (lub numerycznego
               deskryptora pliku), który należy zduplikować i otworzyć. & można użyć po >, >>, <, +>, +>>, i +<.
               Tryb, który  podasz,  powinien  odpowiadać  trybowi  oryginalnego  uchwytu  pliku.  (Duplikowanie
               uchwytów  pliku nie pobiera na konto żadnych istniejących zawartości buforów stdio.)  Oto skrypt,
               który zachowuje, przekierowuje i odświeża STDOUT i STDERR:

                   #!/usr/bin/perl
                   open(SAVEOUT, ">&STDOUT");
                   open(SAVEERR, ">&STDERR");

                   open(STDOUT, ">foo.out") ⎪⎪ die "Nie mogę przekierować stdout";
                   open(STDERR, ">&STDOUT") ⎪⎪ die "Nie mogę zduplikować stdout";

                   select(STDERR); $⎪ = 1;     # zrób niebuforowane
                   select(STDOUT); $⎪ = 1;     # j/w

                   print STDOUT "stdout 1\n";  # działa to też dla
                   print STDERR "stderr 1\n";  # podprocesów

                   close(STDOUT);
                   close(STDERR);

                   open(STDOUT, ">&SAVEOUT");
                   open(STDERR, ">&SAVEERR");

                   print STDOUT "stdout 2\n";
                   print STDERR "stderr 2\n";

               Możesz podać "<&=N", gdzie N jest liczbą. Perl wtedy dokona operacji równoważnej fdopen(3)  z  C.
               Na przykład:

                   open(FILEHANDLE, "<&=$fd")

               Jeśli  otwierasz potok do komendy "-", np. albo "⎪-" albo "-⎪", to dokonywany jest niejawny fork,
               a zwrócona wartość open jest wewnątrz procesu rodzicielskiego pidem potomka, a  w  wątku  potomka
               zerem.  (Aby  określić,  czy  open  był  pomyślny,  użyj  defined($pid).)  Uchwyt pliku u rodzica
               zachowuje się normalnie, lecz i/o dla tego  uchwytu  jest  przesyłane  przez  potok  STDOUT/STDIN
               procesu potomnego.  W procesie potomny uchwyt nie jest otwierany--i/o jest z/do nowego STDOUT lub
               STDIN.  Zazwyczaj  jest  to  używane  jak  normalny  potokowy open, lecz daje lepszą kontrolę nad
               wywoływaniem komendy potoku, np. gdy pracujesz w suid i nie chcesz być  zmuszonym  do  skanowania
               komend powłoki w poszukiwaniu metaznaków.  Następujące pary są mniej lub bardziej równoważne:

                   open(FOO, "⎪tr '[a-z]' '[A-Z]'");
                   open(FOO, "⎪-") ⎪⎪ exec 'tr', '[a-z]', '[A-Z]';

                   open(FOO, "cat -n '$file'⎪");
                   open(FOO, "-⎪") ⎪⎪ exec 'cat', '-n', $file;

               Dla szczegółów, zobacz sekcję Safe Pipe Opens w podręczniku perlipc(1).

               UWAGA:  Przy  każdej  operacji,  dokonującej  forkowania,  nieopróżnione bufory pozostają takie w
               obydwu procesach, co znaczy, że lepiej ustawić $⎪, aby zapobiec duplikowaniu wyjścia.

               Zamykanie potokowego uchwytu pliku powoduje, że proces rodzicielski czeka, aż dziecko zakończy  i
               zwraca wartość statusu w $?.

               Jeśli  używasz  konstruktora  z  pakietu  IO::Handle (lub z jego podklas, takich jak IO::File czy
               IO::Socket), możesz generować anonimowe uchwyty plików, które mają  zakres  dowolnych  zmiennych,
               które utrzymują do nich referencje. Zamykają się one automatycznie po wyjściu z zakresu:

                   use IO::File;
                   ...
                   sub read_myfile_munged {
                       my $ALL = shift;
                       my $handle = new IO::File;
                       open($handle, "myfile") or die "myfile: $!";
                       $first = <$handle>
                           or return ();     # Automatyczne zamknięcie tutaj.
                       mung $first or die "mung failed";       # Lub tutaj.
                       return $first, <$handle> if $ALL;       # Lub tutaj.
                       $first;                                 # Lub tutaj.
                   }

               Nazwa  pliku,  która jest przekazana open, przechodzi operację usuwania prowadzących i kończących
               białych spacji. Aby otworzyć plik, posiadający te dziwne znaki, trzeba je chronić:

                   $file =~ s#^(\s)#./$1#;
                   open(FOO, "< $file\0");

               Jeśli chcesz użyć prawdziwego, znanego z C open() (zobacz stronę  open(2)),  to  powinieneś  użyć
               funkcji sysopen(). Jest to inny sposób chronienia nazw plików przed interpretacją. Np:

                   use IO::Handle;
                   sysopen(HANDLE, $path, O_RDWR⎪O_CREAT⎪O_EXCL, 0700)
                       or die "sysopen $path: $!";
                   HANDLE->autoflush(1);
                   HANDLE->print("stuff $$\n");
                   seek(HANDLE, 0, 0);
                   print "Plik zawiera: ", <HANDLE>;

               Dla dalszych detali o miksowaniu odczytywania i zapisywania, obejrzyj opis seek(), znajdujący się
               gdzie indziej w tym dokumencie.

       opendir UCHWYTKATALOGU,WYRAŻ
               Otwiera  katalog o nazwie WYRAŻ. Otwarty uchwyt można przetwarzać funkcjami readdir(), telldir(),
               seekdir(), rewinddir(), i closedir().  Po sukcesie zwraca  TRUE.  Uchwyty  katalogów  mają  swoją
               własną przestrzeń nazw. Jest ona oddzielna od uchwytów plików.

       ord WYRAŻ

       ord     Zwraca  numeryczną  wartość  ascii pierwszego znaku WYRAŻ. Jeśli WYRAŻ zostało pominięte, używane
               jest $_. Dla operacji odwrotnej, zobacz opis chr, znajdujący się gdzieś w tym dokumencie.

       pack WZORZEC,LISTA
               Pobiera tablicę  lub  listę  wartości  i  pakuje  ją  w  strukturę  binarną,  zwracając  łańcuch,
               zawierający  tę  strukturę.  WZORZEC  jest  sekwencją  znaków,  które  pokazują  kolejność i typy
               wartości. Są one następujące:

                   A   Łańcuch ascii, dopełniany spacjami.
                   a   Łańcuch ascii, dopełniany przez null.
                   b   Łańcuch bitowy (wznosząca kolejność bitów, jak w vec()).
                   B   Łańcuch bitowy (malejąca kolejność bitów).
                   h   Łańcuch szesnastkowy (najpierw niski nibble).
                   H   Łańcuch szesnastkowy (najpierw wysoki nibble).

                   c   Wartość char ze znakiem.
                   C   Wartość char bez znaku.

                   s   Wartość short.
                   S   Wartość short bez znaku.
                         (Ten 'short' jest _dokładnie_ 16 bitowy, co może się różnić od
                         tego, co lokalny kompilator C nazywa jako 'short'.)

                   i   Wartość int ze znakiem.
                   I   Wartość int bez znaku.
                         (Ten 'int' jest przynajmniej 32 bitowy. Dokładny rozmiar zależy
                          od tego, co lokalny kompilator C uważa za 'int' i może być nawet
                          większe niż 'long', opisywany dalej.)

                   l   Wartość long ze znakiem.
                   L   Wartość long bez znaku.
                         (Ta wartość 'long' jest _dokładnie_ 32 bitowa, co może się
                          różnić od tego, co lokalny kompilator C uważa za 'long'.)

                   n   Short w porządku sieciowym (big-endian).
                   N   Long w porządku sieciowym (big-endian).
                   v   Short w porządku "VAX" (little-endian).
                   V   Long w porządku "VAX" (little-endian).
                         (Te 'short' i 'long' są _dokładnie_ 16 i
                          32 bitowe (odpowiednio).)

                   f   Float pojedynczej precyzji w formacie macierzystym.
                   d   Float podwójnej precyzji w formacie macierzystym.

                   p   Wskaźnik do łańcucha zakończonego zerem.
                   P   Wskaźnik do struktury (łańcuch o ustalonej długości).

                   u   Uuencodowany łańcuch.

                   w   Skompresowany integer BER. Jego bajty reprezentują całkowity
                       integer o podstawie 128, najpierw bardziej znaczące cyfry,
                       z tak małą ilością cyfr, jak tylko się da. Ósmy bit jest ustawiany
                       na każdym bajcie, poza ostatnim.

                   x   Bajt null.
                   X   Wstecz o bajt (?) (Back up a byte).
                   @   Wypełnienie null do bezwzględnej pozycji (?)
                       (Null fill to absolute position).

               Po każdej literze może  opcjonalnie  następować  liczba,  która  podaje  licznik  powtórzeń.  Dla
               wszystkich typów, poza "a", "A", "b", "B", "h", "H", i "P", funkcja pack pożre tyle samo wartości
               z  LISTY.   Gwiazdka  (*)  dla  licznika  powtórzeń,  oznacza  użycie wszystkich elementów, które
               pozostały. Typy "a" i "A" pobierają tylko jedną wartość, lecz pakują ją jako  łańcuch  o  podanej
               długości,  wypełniając  ją  w  razie  potrzeby zerami, lub spacjami. (Podczas rozpakowywania, "A"
               zdejmuje kończące spacje i zera, lecz "a" tego nie  robi.)   Podobnie,  pola  "b"  i  "B"  pakują
               łańcuchy,  które  są  długości  tylu  bitów.  "h"  i  "H" pakują łańcuchy, które są długości tylu
               nibblów. "P" pakuje wskaźnik do struktury, której rozmiar jest wskazywany przez  długość.  Liczby
               rzeczywiste  (float, double) są tylko w formacie macierzystym maszyny; z powodu wielości formatów
               zmiennoprzecinkowych i braku standardowej  reprezentacji  "sieciowej",  nie  ma  żadnego  sposobu
               uniwersalnej  wymiany.  Oznacza  to,  że  spakowane  dane  zmiennoprzecinkowe, zapisane na jednej
               maszynie,  mogą  nie  być  odczytywalne  na  innej  -  nawet  jeśli  obydwie  używają  arytmetyki
               zmiennoprzecinkowej  IEEE  (gdyż endainowość pamięci nie jest częścią specyfikacji IEEE). Zauważ,
               że perl używa  wewnętrznie  dla  wszystkich  obliczeń  numerycznych  reprezentacji  double  i  że
               konwersja  z  double  na  float,  a  potem  z  powrotem  na  double powoduje utratę precyzji (np.
               unpack("f", pack("f", $foo)) nie będzie w ogólnym przypadku się równać $foo).

               Przykłady:

                   $foo = pack("cccc",65,66,67,68);
                   # foo to "ABCD"
                   $foo = pack("c4",65,66,67,68);
                   # to samo

                   $foo = pack("ccxxcc",65,66,67,68);
                   # foo to "AB\0\0CD"

                   $foo = pack("s2",1,2);
                   # "\1\0\2\0" na little-endian
                   # "\0\1\0\2" na big-endian

                   $foo = pack("a4","abcd","x","y","z");
                   # "abcd"

                   $foo = pack("aaaa","abcd","x","y","z");
                   # "axyz"

                   $foo = pack("a14","abcdefg");
                   # "abcdefg\0\0\0\0\0\0\0"

                   $foo = pack("i9pl", gmtime);
                   # rzeczywista struktura tm (przynajmniej na moim systemie)

                   sub bintodec {
                       unpack("N", pack("B32", substr("0" x 32 . shift, -32)));
                   }

               Ten sam wzorzec może być ogólnie używany też w funkcji unpack.

       package PRZESTRZEŃNAZW
               Deklaruje jednostkę kompilacji,  przynależącą  do  danej  przestrzeni  nazw.   Zakres  deklaracji
               pakietu leży od deklaracji, do końca otaczającego bloku (tak samo, jak zakres operatora local()).
               Wszelkie  dalsze  niekwalifikowane  identyfikatory dynamiczne będą wewnątrz tej przestrzeni nazw.
               Instrukcja package dotyczy tylko  zmiennych  dynamicznych--włączając  w  to  te,  których  użyłeś
               lokalnie  (local()),--lecz  nie  zmienne  leksykalne,  utworzone  przez  my().  Zazwyczaj jest to
               pierwsza deklaracja we włączanym przez require lub use pliku.  Możesz przełączyć się do pakietu w
               więcej niż jednym miejscu; ma to wpływ jedynie na to, której tablicy symboli używa kompilator dla
               reszty  bloku.   Do  zmiennych  i  uchwytów  plików   z  innych  pakietów,  możesz  odnosić  się,
               poprzedzając   identyfikatory   nazwami   pakietów,   za   którymi   następują   dwa   dwukropki:
               $Pakiet::Zmienna.  Jeśli nazwa pakietu jest zerowa, używany jest pakiet main.  Tak  więc  $::sail
               jest równoważne $main::sail.

               Zobacz sekcję Packages w podręczniku perlmod(1).  Zobacz też podręcznik perlsub(1), gdzie opisane
               są problemy zakresów.

       pipe UCHWYTODCZYTU,UCHWYTZAPISU
               Otwiera  parę  połączonych  potoków,  zupełnie  jak wywołanie systemowe pipe(2). Zauważ, że jeśli
               zestawiasz pętle potokowych procesów, to o  ile  nie  zachowasz  ostrożności,  może  pojawić  się
               deadlock. Dodatkowo, zauważ, że potoki perla używają buforowania stdio, więc możesz być zmuszonym
               ustawić $⎪, aby opróżnić swój UCHWYTZAPISU po każdej z komend, zależnie od aplikacji.

               Obejrzyj  jeszcze  stronę  IPC::Open2,  IPC::Open3  oraz  sekcję  Bidirectional  Communication  z
               podręcznika perlipc(1). Są tam przykłady takich rzeczy.

       pop TABLICA

       pop     Pobiera i zwraca ostatnią wartość tablicy, skracając ją o jeden. Ma podobne działanie do

                   $tmp = $ARRAY[$#ARRAY--];

               Jeśli tablica nie ma elementów, zwracana jest wartość niezdefiniowana.   Jeśli  parametr  TABLICA
               zostanie  pominięty,  to pobiera z tablicy @ARGV w programie głównym, oraz z @_ w podprocedurach,
               podobnie jak shift().

       pos SKALAR

       pos     Zwraca offset, gdzie dla zmiennej SKALAR zakończyło się ostatnie przeszukiwanie m//g. (Jeśli  nie
               podano  zmiennej,  używany jest $_).  Można go modyfikować w celu zmieniania offsetu. Modyfikacja
               ta wpłynie również na  zapewnienia  zerowej  szerokości  \G  w  wyrażeniach  regularnych.  Zobacz
               podręczniki perlref(1) i perlop(1).

       print UCHWYTPLIKU LISTA

       print LISTA

       print   Drukuje  oddzieloną  przecinkami  listę  łańcuchów. Po sukcesie zwraca TRUE. UCHWYTPLIKU może być
               nazwą zmiennej skalarnej, w którym wypadku zmienna ta przechowuje nazwę lub referencję do uchwytu
               pliku, wprowadzając tak poziom niebezpośredniości.  (UWAGA:  Jeśli  UCHYTPLIKU  jest  zmienną,  a
               następny  token  jest [term], to może to być źle zinterpretowane jako operator, chyba że wstawisz
               +, lub ujmiesz argumenty w nawiasy.) Jeśli UCHWYTPLIKU jest pominięty,  drukowanie  następuje  na
               standardowe wyjście (lub do ostatnio wybranego kanału wyjściowego--zobacz opis select, znajdujący
               się  gdzieś w tym dokumencie ).  Jeśli pominięto również argument LISTY, na STDOUT drukowane jest
               $_.  Aby ustawić kanał wyjściowy na coś innego niż STDOUT, użyj operacji  select.  Zauważ,  że  z
               uwagi  na  to, że print pobiera LISTĘ, wszystko z LISTY jest analizowane w kontekście listowym, a
               wszelka podprocedura, którą wywołasz, będzie miała jedno,  lub  więcej  wyrażeń  analizowanych  w
               kontekście  listowym.  Uważaj też, by nie wpisywać z słowem kluczowym print lewego nawiasu, chyba
               że chcesz by odpowiadający prawy nawias kończył  argumenty  do  drukowania--wstaw  +,  lub  otocz
               wszystkie argumenty nawiasami.

               Zauważ,  że  jeśli  przechowujesz  UCHWYTYPLIKÓW  w tablicy, lub innym wyrażeniu, będziesz musiał
               używać bloku, zwracającego jego wartość:

                   print { $files[$i] } "stuff\n";
                   print { $OK ? STDOUT : STDERR } "stuff\n";

       printf UCHWYTPLIKU FORMAT, LISTA

       printf FORMAT, LISTA
               Równoważne  print  UCHWYTPLIKU   sprintf(FORMAT,   LISTA).    Pierwszy   argument   list   będzie
               interpretowany  jako  format  printf.  Jeśli włączone jest use locale, to znak używany dla kropki
               dziesiętnej jest zależny od locala LC_NUMERIC. Zobacz stronę podręcznika perllocale(1).

               Nie wpadnij w pułapkę używania printf(), gdy wystarczyłby zwykły print().  Funkcja  print()  jest
               efektywniejsza i mniej wrażliwa na błędy.

       prototype FUNKCJA
               Zwraca  w  postaci łańcucha prototyp funkcji (lub undef, jeśli funkcja nie ma prototypu). FUNKCJA
               jest referencją lub nazwą funkcji, której prototyp usiłujemy uzyskać.

       push TABLICA,LISTA
               Traktuje TABLICĘ jako stos i wrzuca na jej szczyt wartości LISTY.  Długość TABLICY zwiększa się o
               długość LISTY. Ma takie samo działanie jak

                   for $value (LIST) {
                       $ARRAY[++$#ARRAY] = $value;
                   }

               lecz jest efektywniejsze. Zwraca nową liczbę elementów tablicy.

       q/ŁAŃCUCH/

       qq/ŁAŃCUCH/

       qx/ŁAŃCUCH/

       qw/ŁAŃCUCH/
               Uogólnione cudzysłowy. Zobacz stronę perlop(1).

       quotemeta WYRAŻ

       quotemeta
               Zwraca wartość WYRAŻ  z  poprzedzonymi  odwróconymi  ukośnikami  wszystkimi  nie-alfanumerycznymi
               znakami.  (To  znaczy, że wszystkie znaki, nie podpadające pod /[A-Za-z_0-9]/ zostaną poprzedzone
               odwrotnym  ukośnikiem,  niezależnie  od  ustawień   locale.)    Jest   to   wewnętrzna   funkcja,
               implementująca escape Q w łańcuchach z podwójnych cudzysłowów.

               Jeśli WYRAŻ jest pominięte, używane jest $_.

       rand WYRAŻ

       rand    Zwraca  losową  liczbę,  większą  lub  równą  0  i mniejszą od wartości WYRAŻ. (WYRAŻ powinno być
               dodatnie.) Jeśli WYRAŻ jest pominięte, używana jest wartość 1.  Automatycznie  wywołuje  srand(),
               chyba że był on już wywołany. Zobacz też opis srand().

               (Uwaga:  Jeśli  twoja  funkcja rand zwraca stale liczby, które są zbyt wielkie, lub zbyt małe, to
               znaczy, że twoja wersja perla prawdopodobnie została skompilowana ze złą liczbą RANDBITS.)

       read UCHWYTPLIKU,SKALAR,DŁUGOŚĆ,OFFSET

       read UCHWYTPLIKU,SKALAR,DŁUGOŚĆ
               Próbuje odczytać DŁUGOŚĆ bajtów danych do zmiennej SKALAR z pliku wskazywanego przez UCHWYTPLIKU.
               Zwraca liczbę odczytanych bajtów, lub undef w wypadku błędu. SKALAR  zostanie  rozciągnięty,  lub
               skurczony  do  rzeczywistej  długości  odczytanych  danych.  Można też podać OFFSET. Wtedy odczyt
               nastąpi  w  innym  miejscu  niż  początek  łańcucha.   Wywołanie   to   jest   w   rzeczywistości
               zaimplementowane  w oparciu o wywołanie fread(3) stdio. Aby uzyskać prawdziwe wywołanie systemowe
               read(2), użyj sysread().

       readdir UCHWYTKATALOGU
               Zwraca następny wpis katalogu,  otwartego  przez  opendir().  Jeśli  jest  używane  w  kontekście
               listowym, zwraca resztę wpisów w katalogu. Jeśli nie ma już więcej wpisów, w kontekście skalarnym
               zwracana jest wartość niezdefiniowana, a w kontekście listowym listę null.

               Jeśli masz zamiar dokonywać testów plikowych na wartościach zwracanych przez readdir(), to lepiej
               poprzedź te nazwy katalogiem. Powinno się tak robić, gdyż nie readdir() nie przechodzi do swojego
               katalogu i zaszło by testowanie nie tego pliku co trzeba.

                   opendir(DIR, $some_dir) ⎪⎪ die "Nie powiódł się opendir $some_dir: $!";
                   @dots = grep { /^\./ && -f "$some_dir/$_" } readdir(DIR);
                   closedir DIR;

       readlink WYRAŻ

       readlink
               Zwraca   wartość   dowiązania   symbolicznego.   Działa   to,  jeśli  dowiązania  symboliczne  są
               zaimplementowane [w systemie]. W przeciwnym wypadku powstaje błąd krytycznych.  W  wypadku  błędu
               systemowego,  zwracana  jest  wartość  niezdefiniowana  i  ustawiane jest $! (errno). Jeśli WYRAŻ
               zostanie pominięte, używane jest $_.

       recv GNIAZDO,SKALAR,DŁUGOŚĆ,FLAGI
               Odbiera komunikat na gnieździe. Próbuje odebrać DŁUGOŚĆ bajtów do zmiennej  SKALAR.  (GNIAZDO  to
               uchwyt  gniazda).   W  rzeczywistości  funkcja wykonuje odpowiednik funkcji C recvfrom()(2), więc
               zwraca adres nadawcy. W wypadku błędu,  zwracana  jest  wartość  niezdefiniowana.  SKALAR  będzie
               rozciągany  do  długości  rzeczywiście  odczytanych  danych.  Flagi są takie same jak w wywołaniu
               systemowym o tej samej  nazwie.   Zobacz  jeszcze  sekcję  UDP:  Message  Passing  w  podręczniku
               perlipc(1). Są tam przykłady.

       redo ETYKIETA

       redo    Komenda  redo  restartuje blok pętli, nie analizując przy tym warunku.  Blok continue (jeśli taki
               istnieje) również nie jest wykonywany.  Jeśli pominięta zostanie ETYKIETA, komenda odnosi się  do
               najbardziej  wewnętrznej  otaczającej  pętli.  Komenda  ta  jest  zazwyczaj  wykorzystywana przez
               programy, które chcą się oszukiwać co do tego, co było właśnie pobrane:

                   # Uproszczony ogołacacz komentarzy Pascala
                   # (uwaga: zakłada brak { i } w łańcuchach)
                   LINE: while (<STDIN>) {
                       while (s⎪({.*}.*){.*}⎪$1 ⎪) {}
                       s⎪{.*}⎪ ⎪;
                       if (s⎪{.*⎪ ⎪) {
                           $front = $_;
                           while (<STDIN>) {
                               if (/}/) {      # Koniec komentarza?
                                   s⎪^⎪$front{⎪;
                                   redo LINE;
                               }
                           }
                       }
                       print;
                   }

       ref WYRAŻ

       ref     Jeśli wartość WYRAŻ jest referencją, zwracane jest TRUE, a  w  przeciwnym  wypadku  FALSE.  Jeśli
               WYRAŻ  zostanie  pominięte,  użyte  zostanie  $_.  Zwracana  wartość  zależy  od typu, do którego
               referencja jest referencją.  Wbudowane typy to:

                   REF
                   SCALAR
                   ARRAY
                   HASH
                   CODE
                   GLOB

               Jeśli referencjowany obiekt został błogosławiony (bless()) do pakietu,  to  zwracana  jest  nazwa
               pakietu. Możesz myśleć o ref() jak o operatorze typeof().

                   if (ref($r) eq "HASH") {
                       print "r jest referencją do tablicy asocjacyjnej.\n";
                   }
                   if (!ref ($r) {
                       print "r nie jest referencją.\n";
                   }

               Zobacz też stronę podręcznika perlref(1).

       rename STARANAZWA,NOWANAZWA
               Zmienia  nazwę  pliku.  Po sukcesie zwraca 1, w przeciwnym wypadku 0. Nie działa między granicami
               systemów plików.

       require WYRAŻ

       require Zażądaj pewnej właściwości, podanej przez WYRAŻ, lub $_, jeśli go nie podano.  Jeśli  WYRAŻ  jest
               numeryczne,  to  wymaga ono by bieżąca wersja perla ($] lub $PERL_VERSION) była większa lub równa
               WYRAŻ.

               W przeciwnym wypadku żąda włączenia pliku biblioteki (o ile nie jest on już włączony). Plik  jest
               włączany  z  użyciem  mechanizmu  do-PLIK,  który w zasadzie jest wariacją eval(). Semantyka jest
               podobna do następującej podprocedury:

                   sub require {
                       local($filename) = @_;
                       return 1 if $INC{$filename};
                       local($realfilename,$result);
                       ITER: {
                           foreach $prefix (@INC) {
                               $realfilename = "$prefix/$filename";
                               if (-f $realfilename) {
                                   $result = do $realfilename;
                                   last ITER;
                               }
                           }
                           die "Nie mogę znaleźć $filename w \@INC";
                       }
                       die $@ if $@;
                       die "$filename nie zwróciło prawdziwej wartości" unless $result;
                       $INC{$filename} = $realfilename;
                       $result;
                   }

               Zauważ, że plik nie będzie włączany pod tą samą nazwą dwukrotnie. Jako ostatnią instrukcję,  plik
               musi zwracać TRUE, wskazując tak pomyślne wykonanie kodu inicjalizacji, więc zazwyczaj kończy się
               takie  pliki  "1;", chyba że jesteś pewien, że zwróci TRUE tak czy inaczej. Lepiej jednak wstawić
               po prostu"1;", na wypadek np. dodania nowych instrukcji.

               Jeśli WYRAŻ jest prostym słowem, require zakłada rozszerzenie ".pm" i samodzielnie zamienia  "::"
               na  "/",  ułatwiając  ładowanie  modułów  standardowych. Ta postać ładowania modułów nie ryzykuje
               zmieniania twojej przestrzeni nazw.  to make it easy to load  standard  modules.   This  form  of
               loading of modules does not risk altering your namespace.

               Dla  potężniejszego  narzędzia  importu, obejrzyj opis use, znajdujący się w tym dokumencie, oraz
               stronę perlmod(1).

       reset WYRAŻ

       reset   Ogólnie, używane w bloku continue na końcu pętli, w celu wyczyszczenia  zmiennych  i  resetowania
               przeszukiwań  ??,  tak  by  znów działały.  Wyrażenie jest interpretowane jako lista pojedynczych
               znaków  (dla  podawania  zakresów,  można  używać  myślników).  Wszystkie  zmienne   i   tablice,
               rozpoczynające  się  na  jedną  z tych liter, są resetowane do stanu pierwotnego. Jeśli wyrażenie
               zostanie pominięte, przeszukiwania  jednego-trafienia  (?wzorzec?)  są  resetowane  do  ponownego
               trafienia.   Resetowanie  tyczy  się  tylko  obiektów  bieżącego pakietu. Zwracane jest zawsze 1.
               Przykłady:

                   reset 'X';          # resetuj wszystkie zmienne X
                   reset 'a-z';        # resetuj zmienne małoliterowe
                   reset;              # resetuj tylko przeszukiwania ??

               Resetowanie "A-Z" nie jest zalecane, gdyż  odniesie  się  ono  również  do  tablic  ARGV  i  ENV.
               Resetowane  są tylko zmienne pakietu--zmienne leksykalne są nietykane, lecz one i tak oczyszczają
               się na wyjściu z zakresu. Zobacz opis my, znajdujący się gdzieś w tym dokumencie.

       return WYRAŻ

       return  Powraca z podprocedury, eval(), lub z do PLIK, z wartością podaną przez WYRAŻ. Analiza WYRAŻ może
               zachodzić w kontekście listowym, skalarnym, lub  pustym  (void).  Zależy  to  od  sposobu  użycia
               wartości  zwracanej,  a  kontekst  może  się  zmieniać  od  jednego wywołania do drugiego (zobacz
               wantarray()). Jeśli  WYRAŻ  nie  jest  podane,  w  kontekście  skalarnym  zwracana  jest  wartość
               niezdefiniowana, w listowym pusta lista, a w pustym (void) nic.

               (Zauważ, że przy braku return, podprocedura, eval, lub do PLIK zakończą automatycznie z wartością
               ostatniego wykonanego wyrażenia.)

       reverse LISTA
               W  kontekście  listowym,  zwraca  wartość  listową, składającą się z elementów LISTY, ułożonych w
               przeciwnym porządku. W kontekście skalarnym, elementy listy są łączone w  łańcuch  i  zwracane  w
               odwróconym porządku.

                   print reverse <>;           # line tac, last line first

                   undef $/;                   # for efficiency of <>
                   print scalar reverse <>;    # byte tac, last line tsrif

               Operator  ten jest też przydatny do inwersji tablicy asocjacyjnej, choć są tu pewne zastrzeżenia.
               Jeśli wartość  jest  w  oryginalnej  tablicy  zduplikowana,  to  tylko  jedna  z  nich  może  być
               reprezentowana  jako  klucz  w  tablicy odwróconej. Musi to też przewinąć całą tablicę i zbudować
               nową, co dla dużej tablicy może trochę potrwać.

                   %by_name = reverse %by_address;     # Inwersja tablicy asocjacyjnej

       rewinddir UCHWYTKATALOGU
               Ustawia bieżącą  pozycję  (dla  funkcji  readdir())  na  początek  katalogu,  wskazywanego  przez
               UCHWYTKATALOGU.

       rindex STR,SUBSTR,POZYCJA

       rindex STR,SUBSTR
               Działa  tak  samo  jak  index,  lecz zwraca pozycję ostatniego pojawienia się SUBSTR w STR. Jeśli
               podano POZYCJĘ, to zwracane jest ostatnie pojawienie na, lub przed tą pozycją.

       rmdir NAZWAPLIKU

       rmdir   Kasuje pusty katalog  podany  przez  NAZWĘPLIKU.  Jeśli  operacja  się  powiedzie,  zwraca  1.  W
               przeciwnym  wypadku  zwracane  jest  zero  i  ustawiane  jest  $!  (errno). Jeśli NAZWAPLIKU jest
               pominięta, używane jest $_.

       s///    Operator podmienienia. Zobacz stronę perlop(1).

       scalar WYRAŻ
               Wymusza interpretację skalarną wyrażenia WYRAŻ i zwraca jego wartość.

                   @counts = ( scalar @a, scalar @b, scalar @c );

               Nie istnieje odpowiednik, konwertujący skalar w listę. Jest tak dlatego, że w praktyce  nie  jest
               on  nigdy potrzebny. Jeśli jednak naprawdę chcesz tak zrobić, możesz użyć konstrukcji @{[ (jakieś
               wyrażenie) ]}, a zwykle powinno wystarczyć zwykłe (some expression).

       seek UCHWYTPLIKU,POZYCJA,GDZIE
               Ustawia pozycję UCHWYTUPLIKU, podobnie jak fseek(3) w stdio.   UCHYTPLIKU  może  być  wyrażeniem,
               którego  wartość  daje  nazwę  uchwytu  pliku.  Wartości GDZIE to 0, oznaczające ustawianie nowej
               pozycji na POZYCJĘ, 1 oznaczające ustawianie pozycji na pozycję  bieżącą  plus  POZYCJĘ,  oraz  2
               ustawiające pozycję na EOF plus POZYCJĘ (zazwyczaj ujemną).  Zamiast numerycznych wartości GDZIE,
               można  używać stałych SEEK_SET, SEEK_CUR i SEEK_END z modułu IO::Seekable lub POSIX.  Po sukcesie
               zwracane jest 1, po błędzie 0.

               Jeśli chcesz ustawić pozycję pliku  dla  sysread()  i  syswrite(),  nie  używaj  seek()  --  użyj
               sysseek().

               Na niektórych systemach musisz wykonać seek za każdym razem, gdy przełączasz się między zapisem i
               odczytem.  Wśród  innych  rzeczy,  może  to mieć efekt wołania funkcji stdio clearerr(3). Wartość
               GDZIE 1 jest przydatna do nie ruszania się z pozycji pliku:

                   seek(TEST,0,1);

               Jest to również przydatne dla aplikacji, emulujących tail -f. Gdy raz wejdziesz na EOF,  a  potem
               zaśniesz  na  chwilę,  to  dobrze  przed następnym odczytem użyć seek(), aby wszystko zresetować.
               seek() nie zmienia bieżącej pozycji, lecz  czyści  warunek  EOF  uchwytu,  więc  następne  <PLIK>
               powoduje, że perl znów coś będzie próbował odczytać.  Mamy przynajmniej taką nadzieję.

               Jeśli  to nie działa (niektóre stdio są szczególnie dziwne), to możesz potrzebować czegoś więcej,
               jak:

                   for (;;) {
                       for ($curpos = tell(FILE); $_ = <FILE>; $curpos = tell(FILE)) {
                           # szukaj jakichś rzeczy i wstaw je do plików
                       }
                       sleep($for_a_while);
                       seek(FILE, $curpos, 0);
                   }

       seekdir UCHWYTKATALOGU,POZYCJA
               Ustawia bieżącą pozycję polecenia  readdir()  dla  katalogu  wskazywanego  przez  UCHWYTKATALOGU.
               POZYCJA musi mieć wartość zwracaną przez telldir().

       select UCHWYTPLIKU

       select  Zwraca  obecnie wybrany uchwyt pliku. Jeśli podano UCHWYTPLIKU, ustawia domyślny uchwyt pliku dla
               wyjścia. Daje to dwa efekty: po pierwsze write, lub  print  bez  uchwytu  pliku  będą  zapisywały
               domyślnie do tego UCHWYTUPLIKU. Po drugie, odniesienia zmiennych, związanych z wyjściem, będą się
               odnosiły  do  tego  kanału  wyjścia. Np. jeśli masz ustawić początek formatu formy dla więcej niż
               jednego kanału, mógłbyś użyć następującego:

                   select(REPORT1);
                   $^ = 'report1_top';
                   select(REPORT2);
                   $^ = 'report2_top';

               UCHWYTPLIKU może być wyrażeniem, które daje nazwę rzeczywistego uchwytu pliku. Tak więc:

                   $oldfh = select(STDERR); $⎪ = 1; select($oldfh);

               Niektórzy programiści wolą myśleć o  uchwytach  pliku  jak  o  obiektach,  posiadających  metody,
               zapisując ostatni przykład jako:

                   use IO::Handle;
                   STDERR->autoflush(1);

       select RBITS,WBITS,EBITS,TIMEOUT
               Funkcja  ta  woła  z  podanymi  maskami  bitowymi  wywołanie  systemowe  select(2).  Maski  można
               skonstruować, używając fileno() i vec():

                   $rin = $win = $ein = '';
                   vec($rin,fileno(STDIN),1) = 1;
                   vec($win,fileno(STDOUT),1) = 1;
                   $ein = $rin ⎪ $win;

               Jeśli chcesz wykonywać tę funkcję na wielu uchwytach plików, możesz napisać podprocedurę:

                   sub fhbits {
                       local(@fhlist) = split(' ',$_[0]);
                       local($bits);
                       for (@fhlist) {
                           vec($bits,fileno($_),1) = 1;
                       }
                       $bits;
                   }
                   $rin = fhbits('STDIN TTY SOCK');

               Spotykanym idiomem jest:

                   ($nfound,$timeleft) =
                     select($rout=$rin, $wout=$win, $eout=$ein, $timeout);

               aby blokować, aż coś stanie się gotowe, wykonaj po prostu

                   $nfound = select($rout=$rin, $wout=$win, $eout=$ein, undef);

               Większość systemów nie zwraca niczego mądrego w $timeleft, więc wywołanie select()  w  kontekście
               skalarnym zwróci po prostu $nfound.

               Każda  z  masek bitowych może być niezdefiniowana. Podany timeout jest podawany w sekundach. Może
               być ułamkowy. Uwaga: nie wszystkie implementacje zwracają $timeleft.  Jeśli go nie  zwracają,  to
               zwracają wartość równą tej, przekazanej w $timeout.

               A oto 250 milisekundowe zaśnięcie:

                   select(undef, undef, undef, 0.25);

               UWAGA: Nie próbuj łączyć buforowanego I/O (np. read czy <FH>) z funkcją select. Użyj zamiast tego
               sysread().

       semctl ID,SEMNUM,CMD,ARG
               Woła  funkcję  IPC  semctl(2)  z  Systemu  V. Jeśli CMD to &IPC_STAT lub &GETALL, to ARG musi być
               zmienną, która będzie przechowywać zwróconą strukturę semid_ds, lub  tablicę  wartości  semafora.
               Podczas  błędu, podobnie jak ioctl zwraca wartość niezdefiniowaną, dla zera łańcuch "0 but true",
               a dla pozostałych wartości rzeczywistą wartość zwróconą.

       semget KLUCZ,NSEMS,FLAGI
               Woła  funkcję  IPC  semget(2)  z  Systemu  V.  Zwraca   identyfikator   semafora,   lub   wartość
               niezdefiniowaną w przypadku błędu.

       semop KLUCZ,ŁAŃCUCHOP
               Woła  funkcję  IPC  semop(2)  z  Systemu  V.  Funkcja  ta  dokonuje  operacji  semaforowych,  np.
               sygnalizowania i czekania. ŁAŃCUCHOP musi być spakowaną tablicą struktur semop. Każdą ze struktur
               semop można wygenerować  z  pomocą  pack("sss",  $semnum,  $semop,  $semflag).   Liczba  operacji
               semaforowych  jest implikowana długością ŁAŃCUCHOP. Po sukcesie, funkcja zwraca TRUE, a w wypadku
               błędu FALSE. Na przykład następujący fragment kodu oczekuje na semaforze $semnum z identyfikatora
               $semid:

                   $semop = pack("sss", $semnum, -1, 0);
                   die "Problem z semaforem: $!\n" unless semop($semid, $semop);

               Aby ustawić semafor, zamień "-1" na "1".

       send GNIAZDO,MSG,FLAGI,DO

       send GNIAZDO,MSG,FLAGI
               Wysyła na gniazdo komunikat. Pobiera takie  same  flagi,  jak  wywołanie  systemowe  send(2).  Na
               gniazdach  niepodłączonych,  należy  podać cel wysyłania, czyli argument DO. W tej sytuacji użyta
               zostanie funkcja C sendto(2). Funkcja zwraca liczbę wysłanych znaków, lub w wypadku błędu wartość
               niezdefiniowaną.  Zobacz jeszcze sekcję UDP: Message Passing w  podręczniku  perlipc(1).  Są  tam
               przykłady.

       setpgrp PID,PGRP
               Ustawia  bieżącą  grupę procesów dla podanego PIDa (wynoszącego 0 dla procesu bieżącego). Funkcja
               powoduje błąd  krytyczny  na  maszynach  nie  implementujących  setpgrp(2).  Jeśli  argumenty  są
               pominięte,  odnosi  się  to  domyślnie  do  0,0.  Zauważ, że wersja POSIX setpgrp() nie przyjmuje
               żadnych argumentów, więc przenośne jest tylko setpgrp 0,0.

       setpriority CZYJE,KTO,PRIORYTET
               Ustawia bieżący priorytet procesu, grupy procesów, lub użytkownika. (Zobacz  setpriority(2).)  Na
               maszynach nie implementujących tego wywołania systemowego, powoduje błąd krytyczny.

       setsockopt GNIAZDO,POZIOM,NAZWAOPC,WARTOPC
               Ustawia  żądaną  opcję gniazda. W wypadku błędu, zwraca wartość niezdefiniowaną. Jeśli nie chcesz
               przekazywać argumentu, WARTOPC może być podane jako undef.

       shift TABLICA

       shift   Wysuwa pierwszą wartość tablicy i zwraca ją, skracając tablicę o 1 i przenosząc wszystko  w  dół.
               Jeśli  w  tablicy nie ma elementów, zwracana jest wartość niezdefiniowana. Jeśli TABLICA zostanie
               pominięta, to przesuwana jest w programie głównym tablica @ARGV, oraz @_ w podprocedurach.  (Jest
               to określone leksykalnie.) Zobacz też unshift(), push() oraz pop().  Shift() i unshift() robią to
               samo na lewym końcu tablicy, co pop() i push() na prawym.

       shmctl ID,CMD,ARG
               Woła  funkcję IPC shmctl(2) z Systemu V. Jeśli CMD jest &IPC_STAT, to ARG musi być zmienną, która
               będzie przechowywać zwróconą strukturę shmid_ds. Wartość  zwracana  jest  jak  w  ioctl:  wartość
               niezdefiniowana  dla  błędu,  "0  but  true"  dla  zera  i  rzeczywista wartość zwrócona w innych
               wypadkach.

       shmget KLUCZ,ROZMIAR,FLAGI
               Woła funkcję IPC shmget(2) z Systemu V. Zwraca identyfikator pamięci  dzielonej,  a  w  przypadku
               błędu wartość niezdefiniowaną.

       shmread ID,ZMIENNA,POZYCJA,ROZMIAR

       shmwrite ID,ŁAŃCUCH,POZYCJA,ROZMIAR
               Odczytuje,  lub  zapisuje segment pamięci dzielonej, rozpoczynając w pozycji POZYCJA i obsługując
               rozmiar ROZMIAR bajtów.  Podczas odczytu, ZMIENNA musi być elementem, który  będzie  przechowywał
               odczytane  dane.  Podczas  zapisywania,  jeśli  ŁAŃCUCH  jest  zbyt długi, użytych zostanie tylko
               ROZMIAR bajtów; jeśli ŁAŃCUCH jest zbyt krótki, to reszta zostanie wypełniona  nullami.   Funkcja
               zwraca po sukcesie TRUE oraz FALSE w wypadku błędu.

       shutdown GNIAZDO,JAK
               Wyłącza  połączenie  na gnieździe, w sposób wskazany przez JAK, który ma taką samą interpretację,
               jak w wywołaniu systemowym shutdown(2).

       sin WYRAŻ

       sin     Zwraca sinus z WYRAŻ (podanego w radianach). Jeśli WYRAŻ jest pominięte,  zwracana  jest  wartość
               dla $_.

               Dla operacji odwrotnej do sinusa, możesz użyć funkcji POSIX::asin(), lub następującej relacji:

                   sub asin { atan2($_[0], sqrt(1 - $_[0] * $_[0])) }

       sleep WYRAŻ

       sleep   Powoduje, że skrypt zasypia na WYRAŻ sekund, lub na zawsze, jeśli nie podano WYRAŻ.  Spanie można
               przerwać,  przesyłając  procesowi  SIGALRM.  Zwraca ilość przespanych sekund. Przypuszczalnie nie
               powinno się łączyć wywołań alarm() i sleep(), gdyż sleep() jest często implementowane przy użyciu
               alarm().

               Na niektórych systemach, spanie może trwać do sekundy mniej  niż  żądałeś,  zależnie  od  sposobu
               obliczania sekund. Większość nowoczesnych systemów przesypia cały okres.

               Dla  pauz,  lub większej dokładności niż sekunda, możesz użyć interfejsu syscall() perla i dostać
               się do funkcji setitimer(2), o ile jest ona obsługiwana przez twój system.  Możesz  też  zapoznać
               się z opisem select(), znajdującym się gdzieś w tym dokumencie.

               Zobacz także funkcję sigpause() z modułu POSIX.

       socket GNIAZDO,DOMENA,TYP,PROTOKÓŁ
               Otwiera  gniazdo podanego typu i przywiązuje je do uchwytu pliku GNIAZDO.  DOMENA, TYP i PROTOKÓŁ
               są takie same jak dla wywołania systemowego socket(2). Przed używaniem  tej  funkcji,  powinieneś
               użyć  "use Socket;", aby zaimportować odpowiednie definicje.  Obejrzyj przykład w sekcji Sockets:
               Client/Server Communication w podręczniku perlipc(1).

       socketpair GNIAZDO1,GNIAZDO2,DOMENA,TYP,PROTOKÓŁ
               Tworzy nienazwaną parę gniazd danego typu, w podanej domenie. DOMENA, TYP i PROTOKÓŁ są  podawane
               tak  samo,  jak dla wywołania systemowego socketpair(2). Jeśli funkcja nie jest zaimplementowana,
               to powoduje błąd krytyczny. Po sukcesie zwracane jest TRUE.

       sort NAZWA LISTA

       sort BLOK LISTa

       sort LISTA
               Sortuje LISTĘ i zwraca posortowaną wartość listową. Jeśli pominięte zostaną parametry  NAZWA  lub
               BLOK, sortowanie następuje w porządku porównywania łańcuchów. Jeśli podano NAZWĘ, to wskazuje ona
               na  podprocedurę,  zwracającą  liczbę całkowitą, która jest mniejsza, równa, lub większa od zera,
               zależnie od tego, jak elementy tablicy mają być poukładane. W takich procedurach bardzo przydatne
               są operatory <=> oraz cmp. NAZWA może być nazwą zmiennej skalarnej--w tym  wypadku  wartość  daje
               nazwę  używanej  podprocedury.  Zamiast  NAZWY  można  podać  BLOK,  czyli anonimową podprocedurę
               sortującą.

               W celu polepszenia efektywności, pomijany jest normalny kod wołania podprocedur: podprocedura nie
               może być rekurencyjna, a dwa porównywane  elementy  nie  są  przekazywane  przez  @_,  lecz  jako
               globalne  zmienna  pakietu  $a  oraz  $b  (zobacz  przykład  poniżej).  Są one przekazywane przez
               referencję, więc nie modyfikuj ani $a, ani $b. Nie próbuj też deklarować ich jako leksykalne.

               Nie można też wyjść z bloku sortującego przy użyciu żadnego operatora kontroli pętli czy goto().

               Gdy działa use locale, sort  LIST  sortuje  LISTĘ  według  odpowiedniego  locale.  Zobacz  stronę
               perllocale(1).

               Przykłady:

                   # sortuj leksykalnie
                   @articles = sort @files;

                   # to samo, z jawną procedurą sortującą
                   @articles = sort {$a cmp $b} @files;

                   # teraz niewrażliwie na wielkość liter
                   @articles = sort {uc($a) cmp uc($b)} @files;

                   # to samo w odwrotnym porządku
                   @articles = sort {$b cmp $a} @files;

                   # sortuj rosnąco, numerycznie
                   @articles = sort {$a <=> $b} @files;

                   # j/w, malejąco
                   @articles = sort {$b <=> $a} @files;

                   # sortuj, używając jawnej nazwy podprocedury
                   sub byage {
                       $age{$a} <=> $age{$b};  # założenie numeryczności
                   }
                   @sortedclass = sort byage @class;

                   # to sortuje tablicę asocjacyjną %age według wartości (zamiast klucza)
                   # przy użyciu funkcji inline
                   @eldest = sort { $age{$b} <=> $age{$a} } keys %age;

                   sub backwards { $b cmp $a; }
                   @harry = ('dog','cat','x','Cain','Abel');
                   @george = ('gone','chased','yz','Punished','Axed');
                   print sort @harry;
                           # drukuje AbelCaincatdogx
                   print sort backwards @harry;
                           # drukuje xdogcatCainAbel
                   print sort @george, 'to', @harry;
                           # drukuje AbelAxedCainPunishedcatchaseddoggonetoxyz

                   # sortuj nieefektywnie według malejącego porównania numerycznego,
                   # używając pierwszej liczby całkowitej po znaku =, lub w przeciwnym
                   # wypadku cały rekord, bez zwracania uwagi na wielkość liter.

                   @new = sort {
                       ($b =~ /=(\d+)/)[0] <=> ($a =~ /=(\d+)/)[0]
                                           ⎪⎪
                                   uc($a)  cmp  uc($b)
                   } @old;

                   # to samo, dużo efektywniej;
                   # zbudujemy zewnętrzne indeksy
                   @nums = @caps = ();
                   for (@old) {
                       push @nums, /=(\d+)/;
                       push @caps, uc($_);
                   }

                   @new = @old[ sort {
                                       $nums[$b] <=> $nums[$a]
                                                ⎪⎪
                                       $caps[$a] cmp $caps[$b]
                                      } 0..$#old
                              ];

                   # to samo, przy użyciu Schwartzian Transform (bez tymczasowych)
                   @new = map { $_->[0] }
                       sort { $b->[1] <=> $a->[1]
                                       ⎪⎪
                              $a->[2] cmp $b->[2]
                       } map { [$_, /=(\d+)/, uc($_)] } @old;

               Jeśli  używasz  strict,  nie  możesz  deklarować  $a  i  $b  jako  leksykalia. Są one pakietowymi
               globaliami. Znaczy to, że jeśli jesteś w pakiecie głównym (main), to jest to

                   @articles = sort {$main::b <=> $main::a} @files;

               kub po prostu

                   @articles = sort {$::b <=> $::a} @files;

               lecz jeśli jesteś w pakiecie FooPack, to jest to

                   @articles = sort {$FooPack::b <=> $FooPack::a} @files;

               Funkcja porównująca musi się zachowywać  [jednoznacznie].  Jeśli  zwraca  niespójne,  nielogiczne
               wyniki  (np. czasem mówiąc, że $x[1] jest mniejsze niż $x[2], a czasem odwrotnie), to interpreter
               perla prawdopodobnie się wysypie i zrzuci core.  Wynika to całkowicie z zależności od  systemowej
               funkcji  bibliotecznej  qsort(3);  funkcja  ta  często  nie  dokonuje  pewnych  sprawdzeń  w celu
               polepszenia szybkości.

       splice TABLICA,OFFSET,DŁUGOŚĆ,LISTA

       splice TABLICA,OFFSET,DŁUGOŚĆ

       splice TABLICA,OFFSET
               Usuwa z tablicy elementy wskazane przez OFFSET i DŁUGOŚĆ, oraz zamienia je  ewentualnie  podanymi
               elementami LISTY. Zwraca elementy, które zostały z tablicy usunięte. Tablica zgodnie z potrzebami
               rośnie,  lub  maleje.  Jeśli  parametr  DŁUGOŚĆ  zostanie  pominięty,  to  usuwane jest wszystko,
               poczynając od OFFSET. A oto pewne równoważności (zakładając, że $[ == 0):

                   push(@a,$x,$y)      splice(@a,$#a+1,0,$x,$y)
                   pop(@a)             splice(@a,-1)
                   shift(@a)           splice(@a,0,1)
                   unshift(@a,$x,$y)   splice(@a,0,0,$x,$y)
                   $a[$x] = $y         splice(@a,$x,1,$y);

               Przykład, przy założeniu, że długości tablic są przekazywane przed tablicami:

                   sub aeq {   # porównaj dwie wartości listowe
                       local(@a) = splice(@_,0,shift);
                       local(@b) = splice(@_,0,shift);
                       return 0 unless @a == @b;       # ta sama długość?
                       while (@a) {
                           return 0 if pop(@a) ne pop(@b);
                       }
                       return 1;
                   }
                   if (&aeq($len,@foo[1..$len],0+@bar,@bar)) { ... }

       split /WZORZEC/,WYRAŻ,LIMIT

       split /WZORZEC/,WYRAŻ

       split /WZORZEC/

       split   Dzieli łańcuch na tablicę łańcuchów i zwraca tę tablicę.

               Jeśli nie jest w kontekście listowym, to zwraca listę znalezionych pól i dzieli do tablicy @_. (w
               kontekście listowym możesz wymusić dzielenie do @_, używając jako rozdzielaczy  wzorca  ??,  lecz
               będzie  wciąż  zwracać  wartość  tablicową.)  Używanie  jawnego  dzielenia  do @_ nie jest jednak
               zalecane.

               Jeśli WYRAŻ jest pominięty, dzielony jest łańcuch $_. Jeśli pominięty jest też WZORZEC, dzielenie
               następuje na białych spacjach (po pominięciu wszelkich prowadzących  białych  spacji).  Wszystko,
               odpowiadające  WZORCOWI jest uważane za rozdzielacz pól. (Zauważ, że rozdzielacz może być dłuższy
               niż jeden znak.) Jeśli podano wartość LIMIT i nie jest to liczba ujemna, dzielenie  następuje  do
               nie  więcej  niż  tej  ilości  pól.  Jeśli LIMIT nie jest podany, kończące wypełnienia nullowe są
               obcinane (co dobrze pamiętać użytkownikom pop()). Jeśli LIMIT jest  ujemny,  to  jest  traktowany
               tak, jakby podano arbitralnie duży LIMIT.

               Wzorzec,  odpowiadający  łańcuchowi  null  (żeby  nie być zmylonym ze wzorcem null //, który jest
               tylko jednym członkiem z zestawu wzorców odpowiadających łańcuchowi null) będzie dzielił  wartość
               WYRAŻ na oddzielne znaki w każdym punkcie, który odpowie zapytaniu.  Na przykład:

                   print join(':', split(/ */, 'hi there'));

               da w wyniku 'h:i:t:h:e:r:e'.

               Parametr LIMIT może być użyty do podzielenia linii częściowo

                   ($login, $passwd, $remainder) = split(/:/, $_, 3);

               Podczas  przypisywania do listy, jeśli nie podano LIMITU, perl ustawia domyślny limit wielkości o
               1 większej niż lista zmiennych na liście, zapobiegając tak  niepotrzebnej  pracy.  Dla  powyższej
               listy,  LIMIT  byłby  ustawiony  domyślnie  na  4.   W  aplikacjach,  gdzie  czas jest krytycznym
               czynnikiem, powstrzymuje cię to od dzielenia na więcej pól, niż rzeczywiście potrzebujesz.

               Jeśli WZORZEC zawiera nawiasy, z łańcuchów odpowiadającym podłańcuchom rozdzielacza  tworzone  są
               dodatkowe elementy tablicy.

                   split(/([,-])/, "1-10,20", 3);

               daje wartość listową

                   (1, '-', 10, ',', 20)

               Jeśli masz cały nagłówek normalnego unixowego komunikatu pocztowego w nagłówku $header, to możesz
               rozdzielić go na pola i wartości w następujący sposób:

                   $header =~ s/\n\s+/ /g;  # obsłuż linie kontynuacji
                   %hdrs   =  (UNIX_FROM => split /^(.*?):\s*/m, $header);

               Wzorzec  /WZORZEC/  może  być  zamieniony  wyrażeniem,  umożliwiając tak podawanie wzorców, które
               zmieniają się w czasie. (aby dokonać kompilacji czasu działania tylko raz, użyj /$variable/o.)

               Specjalnym przypadkiem jest podanie jako WZORZEC spacji (' ').  Będzie to powodować dzielenie  na
               białych  spacjach,  podobnie  jak  domyślna wersja split. Tak więc split(' ') może być używany do
               domyślnego zachowania awk, gdzie split(/ /) daje  tyle  łańcuchów  null,  ile  jest  prowadzących
               białych  spacji.  Split  dla /\s+/ jest podobny do split(' '), lecz dowolna biała spacja powoduje
               null na pierwszym polu. Split bez argumentów dokonuje w  rzeczywistości  wewnętrznie  split('  ',
               $_).

               Przykład:

                   open(passwd, '/etc/passwd');
                   while (<passwd>) {
                       ($login, $passwd, $uid, $gid, $gcos,
                           $home, $shell) = split(/:/);
                       ...
                   }

               (Zauważ,  że  $shell  w  powyższym będzie miał za sobą nową linię.  Aby ją usunąć, zapoznaj się z
               funkcjami chop, chomp i join, opisanymi gdzieś w tym dokumencie.)

       sprintf FORMAT, LISTA
               Zwraca łańcuch, sformatowany według konwencji printf, funkcji bibliotecznej języka C, sprintf(3).

               Perl emuluje funkcję C sprintf(), lecz nie używa jej (poza liczbami zmiennoprzecinkowymi, a nawet
               wtedy dozwolone są tylko standardowe modyfikatory). W wyniku,  w  perlu  nie  są  dostępne  żadne
               niestandardowe rozszerzenia lokalnej wersji sprintf().

               Perlowy sprintf() zezwala na następujące, ogólnie znane konwersje:

                  %%   znak procentu
                  %c   znak o podanym kodzie
                  %s   łańcuch
                  %d   integer ze znakiem, dziesiętnie
                  %u   integer bez znaku, dziesiętnie
                  %o   integer bez znaku, ósemkowo
                  %x   integer bez znaku, szesnastkowo
                  %e   liczba zmiennoprzecinkowa w notacji naukowej
                  %f   liczba zmiennoprzecinkowa w ustalonej notacji dziesiętnej
                  %g   liczba zmiennoprzecinkowa w notacji %e lub %f

               Dodatkowo, perl zezwala na następujące szeroko-obsługiwane konwersje:

                  %X   podobne do %x, lecz na dużych literach
                  %E   podobne do %e, lecz z użyciem dużego E
                  %G   podobne do %g, lecz z użyciem dużego E
                  %p   wskaźnik (daje adres wartości, podany szesnastkowo)
                  %n   specjalne: przechowuje liczbę dotychczas wpisanych do następnej
                       zmiennej z listy parametrów

               I  w  końcu,  dla  kompatybilności  wstecznej,  perl  zezwala na poniższe zbyteczne, lecz szeroko
               obsługiwane konwersje:

                  %i   synonim %d
                  %D   synonim %ld
                  %U   synonim %lu
                  %O   synonim %lo
                  %F   synonim %f

               Perl zezwala na użycie następujących uniwersalnych flag między znakiem %, a literą konwersji:

                  spacja  poprzedź liczbę dodatnią spacją
                  +       poprzedź liczbę dodatnią plusem
                  -       wyrównuj do lewej w obszarze pola
                  0       użyj zer zamiast spacji do wyrównywania w prawo
                  #       poprzedź liczbę ósemkową "0", szesnastkową "0x"
                  liczba  minimalna wielkość pola
                  .liczba "precyzja": liczba cyfr po kropce dziesiętnej dla
                          zmiennoprzecinkowych, maksymalna długość dla łańcucha, lub
                          minimalna długość dla liczby całkowitej (integer)
                  l       interpretuj integer jak typ C "long", lub "unsigned long"
                  h       interpretuj integer jak typ C "short", lub "unsigned short"

               Istnieje też jedna flaga specyficzna dla perla:

                  V       interpretuj integer jako standardowy typ integera w perlu

               Tam, gdzie we flagach pojawia się liczba, można użyć gwiazdki ("*"). W  tym  wypadku  perl  używa
               zamiast  liczby  wartości następnego argumentu z listy parametrów. Jeśli szerokość pola, uzyskana
               przez "*" jest ujemna, to ma to samo działanie, co flaga '-': wyrównywanie do lewej.

               Jeśli działa use locale, znaki  używane  do  kropki  dziesiętnej  będą  drukowane  według  locale
               LC_NUMERIC. Zobacz stronę perllocale(1).

       sqrt WYRAŻ

       sqrt    Zwraca pierwiastek kwadratowy z WYRAŻ. Jeśli WYRAŻ jest pominięte, zwraca wartość dla $_.

       srand WYRAŻ

       srand   Ustawia  nasionko liczby losowej dla operatora rand. Jeśli pominięte zostanie WYRAŻ, używana jest
               pseudolosowa  wartość,  oparta  o  bieżący  czas  i  identyfikator  procesu.  W  wersjach   perla
               wcześniejszych  niż  5.004,  domyślnym  nasionkiem był po prostu bieżący czas time(). Nie jest to
               szczególnie  dobre  nasionko,  więc  wiele  starych  programów  załączało  swoją  własną  wartość
               inicjującą (często time ^ $$, lub C<time ^ ($$ + ($$ << 15))>), lecz teraz nie jest to konieczne.

               W  rzeczywistości,  zazwyczaj  w  ogóle  nie  jest konieczne wywoływanie srand, ponieważ jest ono
               wywoływane niejawnie przy pierwszym użyciu  operatora  rand.  Jednak  nie  było  tak  w  wersjach
               wcześniejszych  niż perl 5.005, więc jeśli twój skrypt ma działać ze starszymi wersjami, powinien
               jednak wołać srand().

               Zauważ, że dla potrzeb kryptografii potrzebujesz  czegoś  więcej  niż  tylko  wylosować  domyślne
               nasionko.  Popularną  metodą  jest sprawdzanie sum kontrolnych skompresowanego wyjścia z jednego,
               lub więcej programów szybko zmieniającego się statusu systemu operacyjnego. Na przykład:

                   srand (time ^ $$ ^ unpack "%L*", `ps axww ⎪ gzip`);

               Jeśli naprawdę ci na tym zależy, zobacz moduł Math::TrulyRandom w CPAN.

               Nie wołaj srand() wielokrotnie, chyba że dokładnie wiesz co i w  jakim  celu  robisz.  Celem  tej
               funkcji  jest  zasilenie  funkcji  rand()  tak,  by  rand()  zwracał  inną  sekwencję dla każdego
               uruchomienia programu. Zrób to raz, na samym początku  programu,  bo  w  przeciwnym  wypadku  nie
               uzyskasz z rand() liczb losowych!

               Często wywoływane programy (takie jak skrypty CGI), które jako nasionka używają po prostu

                   time ^ $$

               mogą paść ofiarą własności matematycznej, że

                   a^b == (a+1)^(b+1)

               przez jedną trzecią czasu. Więc nie rób tego.

       stat UCHWYTPLIKU

       stat WYRAŻ

       stat    Zwraca  13  elementową tablicę, opisującą status pliku--otwartego przez UCHWYTPLIKU lub nazwanego
               przez WYRAŻ. Jeśli WYRAŻ jest pominięte, używany jest $_. Gdy  funkcja  zawiedzie,  zwraca  listę
               null. Zazwyczaj jest to używane następująco:

                   ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,
                      $atime,$mtime,$ctime,$blksize,$blocks)
                          = stat($filename);

               Nie  wszystkie  z  tych pól są obsługiwane na wszystkich rodzajach systemów plików. Oto znaczenia
               pól:

                 0 dev      numer urządzenia systemu plików
                 1 ino      numer inode
                 2 mode     prawa pliku (typ i prawa)
                 3 nlink    liczba twardych dowiązań do pliku
                 4 uid      numeryczny UID właściciela
                 5 gid      numeryczny GID właściciela
                 6 rdev     identyfikator urządzenia (tylko dla plików specjalnych)
                 7 size     całkowity rozmiar w bajtach
                 8 atime    ostatni dostęp od epoki
                 9 mtime    ostatnia modyfikacja od epoki
                10 ctime    ostatnia zmiana inode od epoki
                11 blksize  preferowany rozmiar bloku dla I/O systemu plików
                12 blocks   rzeczywista liczba zaalokowanych bloków

               (Epoka nastąpiła o 00:00 1 stycznia, 1970 GMT.)

               Jeśli funkcja dostanie specjalny uchwyt pliku, składający się z podkreślenia,  to  nie  jest  ona
               wykonywana, lecz przekazywana jest zawartość ostatniego testu pliku. Przykład:

                   if (-x $file && (($d) = stat(_)) && $d < 0) {
                       print "$file jest wykonywalnym plikiem NFS\n";
                   }

               (Działa to tylko na maszynach, dla których numer urządzenia jest ujemny dla NFS.)

       study SKALAR

       study   Zajmuje trochę czasu, by przestudiować SKALAR (lub $_, jeśli go nie podano), przygotowując się na
               wiele  przeszukiwań  wzorców  na  tym  łańcuchu, przed jego kolejną modyfikacją. Może to pozwolić
               zyskać na czasie, zależnie od natury i liczby  wzorców,  a  także  od  rozłożenia  częstotliwości
               znaków  w  przeszukiwanym  łańcuchu.  Najlepiej  sprawdzić  empirycznie, czy funkcja ta wpływa na
               szybkość dodatnio, czy ujemnie.  Najwięcej  zyskają  pętle,  szukające  wielu  krótkich,  stałych
               łańcuchów (włączając stałe części bardziej złożonych wzorców). Naraz można mieć obsługiwany przez
               study   tylko  jeden  łańcuch.  Jeśli  przejdziesz  na  inny  skalar,  to  poprzedni  stanie  się
               nieprzestudiowany. (study działa następująco: najpierw robiona jest lista powiązana  dla  każdego
               znaku  przeszukiwanego łańcucha, tak że wiemy na przykład gdzie znajdują się wszystkie znaki 'k'.
               W każdym szukanym łańcuchu wybierany jest w oparciu  o  statyczne  tablice  rozkładu  najrzadziej
               występujący znak. Łańcuch jest poszukiwany w miejscach, gdzie znajduje się ten najrzadszy znak.)

               Na  przykład  oto  pętla,  która  wstawia  wpisy  tworzące  indeks przed każdą linię, zawierającą
               określony wzorzec:

                   while (<>) {
                       study;
                       print ".IX foo\n" if /\bfoo\b/;
                       print ".IX bar\n" if /\bbar\b/;
                       print ".IX blurfl\n" if /\bblurfl\b/;
                       ...
                       print;
                   }

               Użycie study spowoduje szukanie /\bfoo\b/ tylko w miejscach $_, które zawierają "f", gdyż jest to
               najrzadszy znak. Ogólnie, daje to duże zyski, poza przypadkami patologicznymi.  Jedynym  pytaniem
               jest to, czy zachowuje ci to więcej czasu niż zabrało zbudowanie powiązanej listy.

               Zauważ,  że jeśli musisz szukać łańcuchów, o których nic nie wiesz, aż do uruchomienia, to możesz
               zbudować całą pętlę jako łańcuch i evalować to, by zapobiec ciągłemu  rekompilowaniu  wzorców.  W
               połączeniu z czynieniem $/ niezdefiniowanym, aby wessać całe pliki jako jeden rekord, może to być
               bardzo  szybkie,  często  szybsze niż specjalizowane programy typu fgrep(1). Następujący przykład
               skanuje listę plików (@files)  w  poszukiwaniu  listy  słów  (@words)  i  drukuje  nazwy  plików,
               zawierających odpowiednik:

                   $search = 'while (<>) { study;';
                   foreach $word (@words) {
                       $search .= "++\$seen{\$ARGV} if /\\b$word\\b/;\n";
                   }
                   $search .= "}";
                   @ARGV = @files;
                   undef $/;
                   eval $search;               # to krzyczy
                   $/ = "\n";          # ustaw normalny rozdzielacz wejścia
                   foreach $file (sort keys(%seen)) {
                       print $file, "\n";
                   }

       sub BLOK

       sub NAZWA

       sub NAZWA BLOK
               Nie  jest  to  prawdziwa  funkcja,  lecz  definicja  podprocedury.  Jeśli  zawiera tylko NAZWĘ (i
               przypuszczalnie prototypy), jest to tylko deklaracja.  Bez NAZWY jest  to  deklaracja  anonimowej
               funkcji  i  zwraca  wartość:  referencję  CODE  zawężenia, które właśnie utworzyłeś. Dla dalszych
               szczegółów, zobacz stronę podręcznika perlref(1).

       substr WYRAŻ,OFFSET,DŁUGOŚĆ

       substr WYRAŻ,OFFSET
               Wyciąga z WYRAŻ podłańcuch i zwraca go. Pierwszy znak znajduje się pod offsetem 0, lub tym, na co
               ustawiłeś $[ (lecz nie rób tego).  Jeśli OFFSET jest ujemny, rozpoczyna się w tej  odległości  od
               końca łańcucha. Jeśli DŁUGOŚĆ jest pominięta, zwracane jest wszystko, aż do końca łańcucha. Jeśli
               DŁUGOŚĆ jest ujemna, pozostawia tyle znaków z końca łańcucha.

               Funkcji  substr()  możesz  użyć jako lwartości, w którym wypadku WYRAŻ musi być lwartością. Jeśli
               przyznasz coś krótszego niż DŁUGOŚĆ, łańcuch zostanie skrócony, a jeśli coś dłuższego, to łańcuch
               zostanie rozciągnięty. Aby zachować stałą długość  łańcucha,  możesz  potrzebować  dopełnić,  lub
               obciąć wartości przy użyciu sprintf().

       symlink STARYPLIK,NOWYPLIK
               Tworzy  nową  nazwę  pliku,  dowiązaną symbolicznie do starej. Po sukcesie zwraca 1, w przeciwnym
               wypadku 0. Na systemach nie  obsługujących  dowiązań  symbolicznych,  funkcja  ta  powoduje  błąd
               krytyczny podczas działania. Aby go wychwycić, użyj eval:

                   $symlink_exists = (eval {symlink("","")};, $@ eq '');

       syscall LISTA
               Wywołuje  wywołanie  systemowe,  podane jako pierwszy element listy, przekazując resztę elementów
               jako argumenty wywołania. Jeśli nie jest to zaimplementowane, powoduje błąd krytyczny.  Argumenty
               są  interpretowane  następująco:  jeśli podany argument jest numeryczny, przekazywany argument to
               int. Jeśli nie, przekazywany jest wskaźnik do wartości tekstowej.  Odpowiadasz za upewnienie się,
               że łańcuch jest dość długi, by odebrać określony wynik, który może być do niego  zapisany.  Jeśli
               twoje  argumenty  int nie są literałami i nie były nigdy interpretowane w kontekście numerycznym,
               możesz być zmuszonym dodać do nich 0, aby wymusić na nich wygląd liczbowy.

                   require 'syscall.ph';               # może być niezbędne h2ph
                   syscall(&SYS_write, fileno(STDOUT), "hi there\n", 9);

               Zauważ, że perl obsługuje przekazywanie do 14 argumentów do wywołania systemowego, co w  praktyce
               powinno wystarczyć.

       sysopen UCHWYTPLIKU,NAZWAPLIKU,TRYB

       sysopen UCHWYTPLIKU,NAZWAPLIKU,TRYB,PRAWA
               Otwiera  plik  NAZWAPLIKU  i wiąże go z UCHWYTEMPLIKU. Jeśli UCHWYTPLIKU jest wyrażeniem, to jego
               wartość jest używana jako nazwa rzeczywistego uchwytu pliku.  Funkcja  ta  woła  podlegającą  jej
               funkcję systemu operacyjnego, open z parametrami NAZWAPLIKU, TRYB, PRAWA.

               Prawidłowe  wartości  i  bity  flag  parametru  TRYB są zależne od systemu; są one dostępne przez
               standardowy moduł Fcntl. Jednak z przyczyn historycznych, niektóre wartości są uniwersalne;  zero
               oznacza tylko dla odczytu, jeden tylko dla zapisu, a dwa dla zapisu i odczytu.

               Jeśli  plik  NAZWAPLIKU  nie  istnieje,  a  wywołanie  open go tworzy (zazwyczaj dlatego, że TRYB
               zawiera flagę O_CREAT), to wartość PRAW określa  prawa  nowo  utworzonego  pliku.  Jeśli  są  one
               pominięte,  używana jest domyślna wartość 0666, która umożliwia wszystkim odczyt i zapis. Wartość
               ta ma sens, zobacz umask.

               Moduł IO::File daje bardziej obiektowe podejście do tych rzeczy.

       sysread UCHWYTPLIKU,SKALAR,DŁUGOŚĆ,OFFSET

       sysread UCHWYTPLIKU,SKALAR,DŁUGOŚĆ
               Próbuje odczytać DŁUGOŚĆ bajtów danych do zmiennej SKALAR.  Odczyt następuje z pliku wskazywanego
               przez UCHWYTPLIKU, przy użyciu wywołania systemowego read(2). Pomija to stdio, więc łączenie  tej
               funkcji  z  innym  rodzajami  odczytu,  z  print(),  write(),  seek(),  lub tell() może powodować
               problemy. Zwraca ilość odczytanych bajtów, lub undef w wypadku błędu.  SKALAR  będzie  rozciągany
               tak, by pasował do liczby odczytanych bajtów.

               Aby  spowodować  odczyt  danych  z  któregoś miejsca łańcucha (różnego niż początek), można podać
               dodatkowo parametr OFFSET. Jeśli parametr ten jest ujemny, to wskazywana jest pozycja przesunięta
               o tyleż bajtów w tył od końca łańcucha.  Jeśli dodatni offset jest większy od  długości  SKALARA,
               to wynikiem jest wypełnienie do wymaganego rozmiaru znakami "\-", a następnie doklejenie odczytu.

       sysseek UCHWYTPLIKU,POZYCJA,GDZIE
               Zmienia  pozycję  UCHWYTUPLIKU  przy  użyciu  wywołania  systemowego lseek(2). Pomija stdio, więc
               łączenie tego z odczytami (innymi niż sysread()), z print(), write(),  seek(),  lub  tell()  może
               wprowadzić  problemy.  UCHWYTPLIKU może być wyrażeniem, którego wartość daje nazwę uchwytu pliku.
               Wartości dla GDZIE to 0 dla ustawienia nowej pozycji, 1 dla dodania nowej pozycji do bieżącej i 2
               do ustawienia pozycji EOF plus  offset.  Dla  parametru  GDZIE  można  używać  stałych  SEEK_SET,
               SEEK_CUR i SEEK_END z modułu IO::Seekable lub POSIX.

               Zwracana jest nowa pozycja, lub wartość niezdefiniowana w wypadku błędu.  Pozycja zerowa zwracana
               jest  jako  łańcuch  "0 but true"; tak więc sysseek() zwraca TRUE po sukcesie i FALSE po błędzie,
               lecz wciąż możesz łatwo ustalić nową pozycję.

       system LISTA
               Robi dokładnie to samo, co "exec  LISTA",  poza  tym,  że  dokonuje  przed  tym  forka  i  proces
               rodzicielski  czeka,  aż  dziecko  dokona  żywota. Zauważ, że przetwarzanie argumentów różni się,
               zależnie od liczby argumentów. Wartość zwracana jest statusem wyjścia programu,  zwróconym  przez
               wywołanie  wait(). Aby uzyskać rzeczywistą wartość wyjścia, podziel ją przez 256. Zobacz też opis
               exec, znajdujący się gdzieś w tym dokumencie. Nie  jest  to  sposób,  którego  należy  używać  do
               przechwytywania   wyjścia   z  komendy,  dla  tego  celu  użyj  zwykłych  odwróconych  apostrofów
               (backticks?) lub qx//, jak opisano w sekcji `ŁAŃCUCH` podręcznika perlop(1).

               Ponieważ zarówno system() i odwrotne apostrofy blokują SIGINT i SIGQUIT, ubicie ich nie  powoduje
               przerwania twojego programu.

                   @args = ("command", "arg1", "arg2");
                   system(@args) == 0
                        or die "system @args się nie powiódł: $?"

               A  oto  bardziej  wyrafinowany  przykład  analizowania  wartości  zwracanej przez system(). Ma to
               miejsce na systemie unixowym i jest robione,  aby  sprawdzić  wszystkie  możliwości,  włącznie  z
               sygnałami i zrzutami core.

                   $rc = 0xffff & system @args;
                   printf "system(%s) zwrócił %#04x: ", "@args", $rc;
                   if ($rc == 0) {
                       print "normalne zakończenie\n";
                   }
                   elsif ($rc == 0xff00) {
                       print "komenda się nie powiodła: $!\n";
                   }
                   elsif ($rc > 0x80) {
                       $rc >>= 8;
                       print "niezerowy status wyjścia $rc\n";
                   }
                   else {
                       print "skończył z ";
                       if ($rc &   0x80) {
                           $rc &= ~0x80;
                           print "zrzutem core z ";
                       }
                       print "sygnałem $rc\n"
                   }
                   $ok = ($rc != 0);

       syswrite UCHWYTPLIKU,SKALAR,DŁUGOŚĆ,OFFSET

       syswrite UCHWYTPLIKU,SKALAR,DŁUGOŚĆ
               Próbuje  zapisać  DŁUGOŚĆ  bajtów  ze  SKALARA  do  pliku  podanego przez UCHWYTPLIKU przy użyciu
               wywołania systemowego write(2).  Pomija  stdio,  więc  łączenie  tego  z  odczytami  (innymi  niż
               sysread()),  z  print(),  write(),  seek(),  lub  tell()  może spowodować problemy. Zwraca liczbę
               zapisanych bajtów, lub undef w wypadku błędu. Jeśli  długość  jest  większa  niż  dostępne  dane,
               zapisywanych jest tylko tyle danych, ile jest dostępnych.

               Dodatkowo  można  podać  OFFSET,  aby  zapisać  dane  z  jakiejś  części łańcucha, która nie jest
               początkiem. Ujemna wartość offsetu nakazuje zapisywanie od miejsca, przesuniętego o  tyle  bajtów
               od końca łańcucha.

       tell UCHWYTPLIKU

       tell    Zwraca  bieżącą  pozycję pliku dla UCHWYTUPLIKU. UCHWYTPLIKU może być wyrażeniem, którego wartość
               podaje nazwę rzeczywistego uchwytu pliku. Jeśli UCHWYTPLIKU jest pominięty, zakładany jest  plik,
               z którego ostatnio czytano.

       telldir UCHWYTKATALOGU
               Zwraca  bieżącą  pozycję  funkcji  readdir()  dla  UCHWYTUKATALOGU.  Do seekdir() można przekazać
               wartość, każącą osiągnąc określoną pozycję w katalogu.

       tie ZMIENNA,NAZWAKLASY,LISTA
               Funkcja ta łączy zmienną z klasą pakietu, która opisuje jej implementację.   ZMIENNA  jest  nazwą
               czarowanej  zmiennej.  NAZWAKLASY  jest  nazwą  klasy,  implementującej  obiekty właściwego typu.
               Wszelkie dodatkowe argumenty są przekazywane metodzie "new" klasy (czyli TIESCALAR, TIEARRAY, lub
               TIEHASH).  Zazwyczaj, argumenty  te   wyglądają  tak,  jak  te,  które  są  przekazywane  funkcji
               dbm_open()  z  C.  Obiekt,  zwrócony  przez  metodę  "new" jest też zwracany przez tie(), co jest
               przydatne, jeśli chcesz dostać się do innych metod w NAZWIEKLASY.

               Zauważ, że funkcje takie, jak keys() i valuse() mogą zwracać wielkie  wartości  tablicowe,  jeśli
               użyć  je na dużych obiektach, takich jak pliki DBM. Lepiej może być użyć funkcji each() i na nich
               iterować. Przykład:

                   # drukuj offsety pliku historii
                   use NDBM_File;
                   tie(%HIST, 'NDBM_File', '/usr/lib/news/history', 1, 0);
                   while (($key,$val) = each %HIST) {
                       print $key, ' = ', unpack('L',$val), "\n";
                   }
                   untie(%HIST);

               Klasa, implementująca tablicę asocjacyjną, powinna mieć następujące metody:

                   TIEHASH classname, LIST
                   DESTROY this
                   FETCH this, key
                   STORE this, key, value
                   DELETE this, key
                   EXISTS this, key
                   FIRSTKEY this
                   NEXTKEY this, lastkey

               Klasa, implementująca zwykłą tablicę, powinna mieć następujące metody:

                   TIEARRAY classname, LIST
                   DESTROY this
                   FETCH this, key
                   STORE this, key, value
                   [others TBD]

               Klasa, implementująca skalar, powinna mieć następujące metody:

                   TIESCALAR classname, LIST
                   DESTROY this
                   FETCH this,
                   STORE this, value

               W przeciwieństwie do funkcji dbmopen(), funkcja tie() nie używa, lub wymaga  dla  ciebie  modułów
               (use,  require)--musisz o to zadbać samodzielnie. Zobacz podręcznik DB_File oraz moduł Config dla
               interesujących implementacji tie().

       tied ZMIENNA
               Zwraca referencję do obiektu kryjącego się pod ZMIENNĄ (wartość, która była  początkowo  zwrócona
               przez  tie(),  które  powiązał zmienną z pakietem.) Gdy ZMIENNA nie jest powiązana, zwracana jest
               wartość niezdefiniowana.

       time    Zwraca liczbę sekund od początku epoki (tj. na MacOs od 00:00:00, 1 Stycznia, 1904, a od 00:00:00
               UTC, 1 Stycznia, 1970 dla większości innych systemów).  Wystarczające do przekazania dla gmtime()
               lub localtime().

       times   Zwraca czteroelementową tablicę, podającą w sekundach czasy użytkownika i  systemu.  Wartości  są
               dla tego procesu, oraz dla dzieci tego procesu.

                   ($user,$system,$cuser,$csystem) = times;

       tr///   Operator translacji. To samo co y///. Zobacz stronę perlop(1).

       truncate UCHWYTPLIKU,DŁUGOŚĆ

       truncate WYRAŻ,DŁUGOŚĆ
               Skraca  plik, otwarty na UCHWYCIEPLIKU lub nazwany przez WYRAŻ do podanej długości. Na systemach,
               gdzie nie jest to zaimplementowane, powoduje błąd krytyczny.

       uc WYRAŻ

       uc      Zwraca WYRAŻ w  dużych  literach.  Jest  to  funkcja  wewnętrzna,  implementująca  escape  \U  na
               łańcuchach  ujętych  w  podwójne cudzysłowy.  Szanuje bieżące ustawienie LC_CTYPE, jeśli włączono
               use locale.  Zobacz podręcznik perllocale(1).

               Jeśli WYRAŻ jest pominięte, używa $_.

       ucfirst WYRAŻ

       ucfirst Zwraca WYRAŻ, z pierwszym  znakiem  zmienionym  na  dużą  literę.  Jest  to  funkcja  wewnętrzna,
               implementująca  escape  \u  na  łańcuchach  ujętych  w  cudzysłowy.   Szanuje  bieżące ustawienie
               LC_CTYPE, jeśli włączono use locale.  Zobacz podręcznik perllocale(1).

               If EXPR is omitted, uses $_.

       umask WYRAŻ

       umask   Ustawia umaskę procesu na WYRAŻ i zwraca wartość  poprzednią.  Jeśli  WYRAŻ  jest  pominięte,  po
               prostu  zwraca  bieżącą umaskę. Pamiętaj, że umaska jest liczbą, zazwyczaj podawaną ósemkowo; nie
               jest łańcuchem cyfr ósemkowych. Zobacz opis oct, znajdujący się gdzieś w  tym  dokumencie,  jeśli
               masz tylko łańcuch.

       undef WYRAŻ

       undef   Powoduje,  że  wartość  WYRAŻ,  która musi być lwartością, staje się niezdefiniowana. Używaj tego
               tylko na wartościach skalarnych,  całej  tablicy,  całej  tablicy  asocjacyjnej,  lub  na  nazwie
               podprocedury  (przy  użyciu  "&").   (Używanie tej funkcji w innych wypadkach przypuszczalnie nie
               doprowadzi  do  takich  rezultatów,  jakich  można   by   oczekiwać.)   Zawsze   zwraca   wartość
               niezdefiniowaną.  Możesz pominąć WYRAŻ--w tym wypadku nic nie jest pozbawiane zdefiniowania, lecz
               mimo to uzyskujesz wartość niezdefiniowaną, którą możesz np. zwrócić  z  podprocedury,  przypisać
               zmiennej,lub przekazać jako parametr. Przykłady:

                   undef $foo;
                   undef $bar{'blurfl'};             # Porównaj z: delete $bar{'blurfl'};
                   undef @ary;
                   undef %hash;
                   undef &mysub;
                   return (wantarray ? (undef, $errmsg) : undef) if $they_blew_it;
                   select undef, undef, undef, 0.25;
                   ($a, $b, undef, $c) = &foo;       # Ignoruj trzecią zwróconą wartość

       unlink LISTA

       unlink  Kasuje listę plików. Zwraca liczbę skasowanych plików.

                   $cnt = unlink 'a', 'b', 'c';
                   unlink @goners;
                   unlink <*.bak>;

               Uwaga:  unlink  nie  skasuje  katalogów, chyba że jesteś superużytkownikiem i przekazałeś perlowi
               flagę -U. Nawet gdy te warunki są spełnione, bądź ostrzeżony, że skasowanie katalogu może wywołać
               uszkodzenie systemu plików.  Zamiast tego użyj rmdir.

               Jeśli LISTA jest pominięta, używa $_.

       unpack WZORZEC,WYRAŻ
               Unpack robi odwrotność tego, co pack: pobiera łańcuch, reprezentujący strukturę i rozwija  go  na
               listę  wartości, zwracają wartość tablicową (w kontekście skalarnym zwraca tylko pierwszą wartość
               tablicy). WZORZEC jest tego samego formatu co dla funkcji pack. Oto podprocedura, która  dokonuje
               substringu:

                   sub substr {
                       local($what,$where,$howmuch) = @_;
                       unpack("x$where a$howmuch", $what);
                   }

               a potem mamy

                   sub ordinal { unpack("c",$_[0]); } # to samo co ord()

               Dodatkowo,   możesz   poprzedzić  pola  %<liczbą>,  wskazując,  że  chcesz  <liczba>-bitową  sumę
               szesnastkową elementów, zamiast samych elementów.  Domyślna jest  suma  16-bitowa.  Na  przykład,
               następujący przykład oblicza tę samą liczbę co program sum z Systemu V:

                   while (<>) {
                       $checksum += unpack("%16C*", $_);
                   }
                   $checksum %= 65536;

               Następujący fragment efektywnie oblicza liczbę ustawionych bitów w wektorze bitowym:

                   $setbits = unpack("%32b*", $selectmask);

       untie ZMIENNA
               Rozbija powiązanie między zmienną, a pakietem. Zobacz tie().

       unshift TABLICA,LISTA
               Robi odwrotną rzecz do shift. Lub odwrotną do push, zależnie jak na to spojrzeć. Dokleja listę do
               początku tablicy i zwraca nową liczbę elementów.

                   unshift(ARGV, '-e') unless $ARGV[0] =~ /^-/;

               Zauważ,  że  LISTA  jest  doklejana  cała,  a  nie  jeden  element naraz, więc doklejone elementy
               pozostają w tej samej kolejności. Aby ją odwrócić, użyj reverse.

       use Module LISTA

       use Module

       use Module WERSJA LISTA

       use WERSJA
               Importuje semantykę danego modułu do bieżącego pakietu. Ogólnie aliasuje  określone  podprocedury
               lub nazwy zmiennych do twojego pakietu. Jest to dokładnie równoważne

                   BEGIN { require Module; import Module LIST; }

               poza tym, że Module musi być gołym słowem.

               Jeśli  pierwszy argument use jest liczbą, to jest ona traktowana jako numer wersji, zamiast nazwa
               modułu. Jeśli wersja interpretera  perla  jest  mniejsza  niż  WERSJA,  to  wyświetlony  zostanie
               komunikat  o  błędzie,  a  perl  natychmiast  zakończy działanie. Jest to często przydatne, jeśli
               chcesz sprawdzić wersję perla przed używaniem modułów bibliotecznych, które zmieniły się w sposób
               niekompatybilny od czasu starszych wersji perla.  (staramy się by tak nie było.)

               Słowo BEGIN wymusza by require i import zaszły podczas kompilacji.  Require  zapewnia,  że  moduł
               będzie  załadowany  do pamięci, jeśli wcześniej nie był. Import nie jest wbudowany--jest to tylko
               zwykłe, statyczne wywołanie metody pakietu "Module"  aby  powiedzieć  modułowi,  by  zaimportował
               listę  właściwości  do  pakietu bieżącego. Moduł może implementować swoją metodę import w dowolny
               sposób, choć większość modułów woli  wyprowadzać  swoją  metodę  poprzez  dziedziczenie  z  klasy
               Exporter,  zdefiniowanej  w  module  Exporter,  Zobacz  podręcznik Exporter.  Jeśli nie ma żadnej
               metody importującej, to błąd jest cicho ignorowany. Może się to w przyszłych wersjach zmienić  na
               błąd krytyczny.

               Jeśli nie chcesz zmieniania swojej przestrzeni nazw, załącz jawnie pustą listę:

                   use Module ();

               Jest to dokładnie równoważne

                   BEGIN { require Module; }

               Jeśli  między  Module,  a  LISTA  jest obecny argument WERSJA, to use wywoła metodę VERSION klasy
               Module z podaną wersją, jako argumentem. Domyślna metoda VERSION, dziedziczona z klasy Universal,
               zakracze jeśli podana wersja jest większa niż wartość zmiennej $Module::VERSION. (Zauważ, że  nie
               ma przecinka po WERSJI!)

               Ponieważ  jest  to  szeroko  otwarty  interfejs,  można  tak  implementować też pragmy (dyrektywy
               kompilatora). Obecnie zaimplementowane pragmy to:

                   use integer;
                   use diagnostics;
                   use sigtrap qw(SEGV BUS);
                   use strict  qw(subs vars refs);
                   use subs    qw(afunc blurfl);

               Te pseudo moduły importują semantykę do bieżącego zakresu bloku, w przeciwieństwie   do  zwykłych
               modułów, które importują symbole do bieżącego pakietu.

               Istnieje  odpowiadająca  komenda  "no",  która  de-importuje  rzeczy zaimportowane przez use, np.
               wywołuje metodę unimport Module LISTA zamiast import.

                   no integer;
                   no strict 'refs';

               Jeśli nie ma metody unimport, wywołanie to kończy się błędem krytycznym.

               Dla listy standardowych modułów i pragm, zobacz podręcznik perlmod.

       utime LISTA
               Zmienia czasy dostępu i modyfikacji na każdym pliku z listy. Pierwsze dwa  elementy  listy  muszą
               być numerycznymi czasami dostępu i modyfikacji, dokładnie w tej kolejności. Zwraca liczbę plików,
               na których operacja się powiodła. Czas modyfikacji inode jest ustawiany na czas bieżący. Przykład
               komendy "touch":

                   #!/usr/bin/perl
                   $now = time;
                   utime $now, $now, @ARGV;

       values HASH
               Zwraca  normalną tablicę, składającą się ze wszystkich wartości wymienionej tablicy asocjacyjnej.
               W kontekście skalarnym, zwracana jest liczba wartości.   Wartości  są  zwracane  w  dość  losowej
               kolejności,  lecz  jest  ona  ta  sama,  co  zwracana przez funkcje keys() lub each(). Jako efekt
               uboczny, funkcja resetuje iterator tablicy asocjacyjnej. Zobacz też keys(), each(), i sort().

       vec WYRAŻ,OFFSET,BITY
               Traktuje łańcuch WYRAŻ  jako  wektor  całkowitych  integerów  i  zwraca  wartość  pola  bitowego,
               wskazanego  przez  OFFSET.  BITY  podają liczbę bitów, które są zarezerwowane dla każdego wpisu w
               wektorze bitowym.  Musi to być potęga dwójki do 1 do 32. vec może też być przypisany do czegoś--w
               tym wypadku potrzebne są nawiasy, aby nadać wyrażeniu właściwy priorytet, jak w

                   vec($image, $max_x * $x + $y, 8) = 3;

               Wektory utworzone przez vec() mogą też być obsługiwane przez operatory logiczne ⎪, & i  ^,  które
               założą, że bitowa operacja wektorowa jest oczekiwana gdy obydwa operandy są łańcuchami.

               Aby przekształcić wektor bitowy na tablicę łańcuchową zer i jedynek, użyj:

                   $bits = unpack("b*", $vector);
                   @bits = split(//, unpack("b*", $vector));

               Jeśli znasz dokładną długość w bitach, możesz podać ją zamiast *.

       wait    Czeka,  aż proces potomny się nie zakończy i zwraca pid zamkniętego procesu, lub -1, jeśli go nie
               było. Status jest zwracany w $?.

       waitpid PID,FLAGI
               Czeka, aż proces potomny się zakończy i zwraca pid zamkniętego procesu, lub -1,  jeśli  nie  było
               takiego procesu. Status jest zwracany w $?.  Jeśli powiesz

                   use POSIX ":sys_wait_h";
                   ...
                   waitpid(-1,&WNOHANG);

               to  możesz  dokonać  nieblokującego  oczekiwania na dowolny proces. Nieblokujące oczekiwanie jest
               dostępne na maszynach, obsługujących albo wywołanie waitpid(2), albo wait4(2). Jednak oczekiwanie
               na konkretny pid z FLAGAMI wartości 0 jest zaimplementowane  wszędzie.  (Perl  emuluje  wywołanie
               systemowe,  pamiętając  wartości  statusu procesów, które zakończyły się, lecz nie były odczytane
               przez skrypt perla)

       wantarray
               Zwraca TRUE, jeśli kontekst obecnie wykonywanej  podprocedury  szuka  wartości  listowej.  Zwraca
               FALSE,  jeśli  kontekst  szuka skalara.  Zwraca wartość niezdefiniowaną, jeśli kontekst nie szuka
               wartości (void).

                   return unless defined wantarray;    # nie myśl o robieniu więcej
                   my @a = complex_calculation();
                   return wantarray ? @a : "@a";

       warn LIST
               Produkuje komunikat na STDERR, podobnie jak die(), lecz nie wychodzi i nie wyrzuca wyjątku.

               Jeśli zainstalowany jest handler $SIG{__WARN__), nie są drukowane żadne komunikaty.  Od  handlera
               zależy  obsługa  komunikatu,  gdy  tak  zadecyduje (np. przekonwertowanie go na die()). Większość
               handlerów musi więc wywoływać warn() ponownie, aby  wyświetlić  komunikat.  Zauważ,  że  jest  to
               bezpieczne i nie spowoduje nieskończonej pętli, gdyż haki __WARN__ nie są wołane z niego samego.

               Zachowanie  to  jest  trochę  inne  od  tego  dla  $SIG{__DIE__} (które nie powstrzymywały tekstu
               komunikatów, lecz mogły wywołać die() ponownie, aby je zmienić).

               Używanie handlerów __WARN__ daje potężne narzędzie do wyciszania wszystkich ostrzeżeń (nawet  tak
               zwanych obowiązkowych). Na przykład:

                   # wywal wszystkie ostrzeżenia czasu kompilacji
                   BEGIN { $SIG{'__WARN__'} = sub { warn $_[0] if $DOWARN } }
                   my $foo = 10;
                   my $foo = 20;          # bez ostrzegania o zduplikowaniu my $foo
                                          # lecz przecież sam się o to prosiłeś!
                   # bez ostrzeżeń czasu kompilacji i czasu działania przed tym miejscem
                   $DOWARN = 1;

                   # ostrzeżenia czasu działania są tu włączone
                   warn "\$foo is alive and $foo!";     # pojawia się

               Zobacz stronę perlvar(1) dla szczegółów o ustawianiu wpisów %SIG i dla przykładów.

       write UCHWYTPLIKU

       write WYRAŻ

       write   Zapisuje  sformatowany  rekord  (prawdopodobnie wieloliniowy) do podanego pliku, używając formatu
               związanego z tym plikiem. Domyślnie format dla pliku jest tym, który ma tę samą nazwę, co  uchwyt
               pliku, lecz można go zmienić z pomocą funkcji select(), przypisując nazwę formatu zmiennej $~.

               Początek  przetwarzania  formy jest obsługiwany automatycznie: jeśli nie ma miejsca na stronie na
               sformatowany rekord, to strona jest przewijana przez wpisanie form feed, następnie  używany  jest
               specjalny  format  góry-strony  (do  formatowania  nagłówka  nowej  strony), a potem wpisany jest
               rekord. Domyślnie, format góry-strony jest nazwą uchwytu pliku z dodanym "_TOP",  lecz  można  go
               ustawić dynamicznie, przyznając zmiennej $^ nazwę podczas gdy wybrany (select) jest uchwyt pliku.
               Liczba  pozostających  linii bieżącej strony znajduje się w zmiennej $- i może być ustawiona na 0
               aby wymusić nową stronę.

               Jeśli UCHWYTPLIKU nie jest podany, wyjście idzie do bieżącego domyślnego kanału  wyjścia,  którym
               jest  początkowo  STDOUT,  a  który  może być zmieniony operatorem select. Jeśli UCHWYTPLIKU jest
               wyrażeniem WYRAŻ, to jest ono analizowane, a wynikowy łańcuch jest używany do  podejrzenia  nazwy
               UCHWYTUPLIKU. Dla dalszych informacji o formatach, zobacz stronę perlform(1).

               Zauważ, że zapis NIE jest odwrotnością odczytu. Niestety.

       y///    Operator translacji. To samo co tr///. Zobacz stronę perlop(1).

INFORMACJE O TŁUMACZENIU

       Powyższe tłumaczenie pochodzi z nieistniejącego już Projektu Tłumaczenia Manuali i może nie być aktualne.
       W  razie  zauważenia  różnic  między powyższym opisem a rzeczywistym zachowaniem opisywanego programu lub
       funkcji, prosimy o zapoznanie się z oryginalną (angielską) wersją strony podręcznika za pomocą polecenia:

              man --locale=C 1 perlfunc

       Prosimy  o  pomoc  w  aktualizacji  stron  man  -   więcej   informacji   można   znaleźć   pod   adresem
       http://sourceforge.net/projects/manpages-pl/.

3rd Berkeley Distribution                     perl 5.004, patch 01                                   PERLFUNC(1)