Provided by:
manpages-pl_20060617-3_all 
NAZWA
perlfunc - Wbudowane funkcje perla
OPIS
Funkcje z tej sekcji mog sluy pomoc w wyraeniach. Podpadaj one pod dwie
glowne kategorie: operatory list, oraz nazwane operatory
jednoargumentowe. [Przyp. tlum.: w perlu nie ma prawdziwych funkcji, s
operatory] Roni si one w zwizku priorytetowym przecinkiem. (zobacz
tablic priorytetow na stronie perlop(1).). Operatory list pobieraj
wicej ni jeden argument, podczas gdy operatory jednoargumentowe, z
definicji, nigdy nie bior wicej ni jeden argument. Tak wic przecinek
koczy argument operatora jednoargumentowego, lecz jedynie rozdziela
argumenty operatora listy. Ogolnie, operator jednoargumentowy daje
swojemu argumentowi kontekst skalarny, podczas gdy operator listowy moe
dawa zarowno kontekst skalarny, jak i listowy. Jeli daje obydwa, to
argumenty skalarne bd najpierw, a za nimi nastpi argumenty listowe.
(Zauwa, e moe istnie tylko jeden argument listowy.) Np. funkcja
splice() ma trzy argumenty skalarne, za ktorymi nastpuje lista.
W opisach skladni, ktore s niej, operatory list, ktore oczekuj listy (i
daj kontekst listowy elementom tej listy) s pokazywane z argumentem
LISTA. Lista taka moe sklada si z dowolnej kombinacji argumentow
skalarnych lub wartoci listowych; wartoci listowe bd wlczone w list
tak, jakby kady pojedynczy element byl interpolowany w tym punkcie
listy, tworzc dlusz, jednowymiarow warto listow. Elementy typu LISTA
powinny by oddzielone przecinkami.
Kada funkcja z poniszej listy, moe by uyta bez, albo z nawiasami wokol
swoich argumentow. (Opisy skladni pomijaj nawiasy.) Jeli uywasz
nawiasow, to prosta (lecz czasem zaskakujca) regula jest taka: WYGLDA
jak funkcja, wic JEST funkcj i priorytet nie ma znaczenia. W przeciwnym
wypadku jest to operator listowy lub operator jednoargumentowy i
priorytet si liczy. I biala spacja midzy funkcj i lewym nawiasem nie
liczy si--wic musisz by czasem ostrony:
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.
Jeli uruchamiasz perla z przelcznikiem -w, to bdziesz o tym ostrzegany.
Na przyklad trzecia z powyszych linii daje w efekcie:
print (...) interpreted as function at - line 1.
Useless use of integer addition in void context at - line 1.
Dla instrukcji, ktore mog by uywane zarowno w kontekstach skalarnych,
jak i listowych, bld nie wymagajcy przerwania jest ogolnie wskazywany w
kontekcie skalarnym przez zwrot niezdefiniowanej wartoci, a w kontekcie
listowym przez zwrot listy null.
Zapamitaj nastpujc regul:
NIE ISTNIEJE OG'OLNA REGU/LA KONWERSJI LISTY W SKALAR!
Kady operator i funkcja decyduje, jaki rodzaj wartoci jest najbardziej
odpowiedni do zwrocenia w kontekcie skalarnym. Niektore operatory
zwracaj dlugo listy, ktora bylaby zwrocona w kontekcie listowym.
Niektore zwracaj pierwsz warto listy. Niektore zwracaj ostatni warto
listy. Inne zwracaj liczb pomylnych operacji. Ogolnie, robi one to,
czego chcesz, chyba e oczekujesz spojnoci.
Funkcje perla wed/l/lug kategorii
Oto funkcje perla (wlczajc rzeczy, ktore wygldaj jak funkcje, np.
niektore slowa kluczowe i nazwane operatory), poukladane wedlug
kategorii. Niektore funkcje pojawiaj si w wicej ni jednym miejscu.
Funkcje dla skalarow lub lacuchow
chomp, chop, chr, crypt, hex, index, lc, lcfirst, length, oct,
ord, pack, q/LACUCH/, qq/LACUCH/, reverse, rindex, sprintf,
substr, tr///, uc, ucfirst, y///
Wyraenia regularne i porownywanie wzorcow
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/LACUCH/, reverse, sort, unpack
Funkcje dla %HASHow (tablic asocjacyjnych)
delete, each, exists, keys, values
Funkcje wejcia i wyjcia
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 okrelonej dlugoci lub rekordow
pack, read, syscall, sysread, syswrite, unpack, vec
Funkcje dla deskryptorow plikow, plikow lub katalogow
-X, chdir, chmod, chown, chroot, fcntl, glob, ioctl, link, lstat,
mkdir, open, opendir, readlink, rename, rmdir, stat, symlink,
umask, unlink, utime
Slowa kluczowe zwizane z kontrol dzialania programu
caller, continue, die, do, dump, eval, exit, goto, last, next,
redo, return, sub, wantarray
Slowa kluczowe zwizane z zakresami
caller, import, local, my, package, use
Rone funkcje
defined, dump, eval, formline, local, my, reset, scalar, undef,
wantarray
Funkcje dla procesow i grup procesow
alarm, exec, fork, getpgrp, getppid, getpriority, kill, pipe,
qx/LACUCH/, setpgrp, setpriority, sleep, system, times, wait,
waitpid
Slowa kluczowe zwizane z modulami perla
do, import, no, package, require, use
Slowa kluczowe zwizane z klasami i obiektowoci
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 midzyprocesowej Systemu V
msgctl, msgget, msgrcv, msgsnd, semctl, semget, semop, shmctl,
shmget, shmread, shmwrite
Pobieranie informacji uytkownika 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 zwizane 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 bylo slowem kluczowym w perl4, lecz w perl5 jest to
operator, ktory moe by uywany w wyraeniach.
Funkcje przedawnione w perl5
dbmclose, dbmopen
Alfabetyczny listing funkcji perla
-X UCHWYTPLIKU
-X WYRA
-X Test pliku, gdzie X jest jedn z niej wymienionych liter. Ten
jednoargumentowy operator pobiera argument, nazw pliku lub jego
uchwyt. Nastpnie testuje plik i sprawdza, czy co jest w nim
prawdziwe. Jeli argument zostanie pominity, testuje $_, nie
liczc -t, ktore testuje STDIN. Zasadniczo zwraca 1 dla wyniku
pozytywnego i '' dla negatywnego, a warto niezdefiniowan, jeli
plik nie istnieje. Mimo miesznych nazw, priorytety s takie same
jak kadym innym nazwanym operatorze jednoargumentowym i
argument moe by otoczony nawiasami. Operator moe 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 Wlacicielem 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 Wlacicielem 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 dowizaniem 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 (przeciwiestwo -T).
-M Wiek pliku w dniach, gdy uruchomil si skrypt
-A To samo dla czasu dostpu.
-C To samo dla zmiany informacji inode.
Interpretacja operatorow praw pliku -r, -R, -w, -W, -x i -X
bazuje jedynie na prawach pliku i uid/gid uytkownika. Mog
istnie inne powody, dla ktorych w rzeczywistoci nie moesz go
odczyta, zapisa lub uruchomi. Zauwa te, e dla superuytkownika,
operatory -r, -R, -w, i -W zawsze zwracaj 1, a -x i -X zwracaj
1, jeli ustawiony jest tak dowolny bit wykonania. Skrypty
uruchamiane przez superuytkownika powinny wic wywolywa do celow
testowania praw pliku funkcj stat() lub tymczasowo zmieni uid
na co innego.
Przyklad:
while (<>) {
chop;
next unless -f $_; # ignoruj specjalne
...
}
Zauwa, e -s/a/b/ nie dokonuje zanegowanego podstawienia.
Powiedzenie -exp($foo) dziala wci zgodnie z oczekiwaniami,
jednak jedynie pojedyncze litery za znakiem minusa s
interpretowane jako testy plikowe.
Przelczniki -T i -B dzialaj tak, e testuj pierwszy blok pliku w
poszukiwaniu dziwnych znakow, takich jak dziwne kody sterujce,
lub znaki z wysokiego zestawu znakow. Jeli jest ich zbyt wiele
(>30%), to jest to plik -B, w przeciwnym wypadku to plik -T.
Dodatkowo, kady plik, zawierajcy w pierwszym bloku null jest
uwaany za plik binarny. Jeli -T lub -B jest uywane na uchwycie
pliku, to testowany jest biecy bufor standardowego wejcia
zamiast pierwszego bloku. Zarowno -T jak i -B zwracaj odpowied
pozytywn dla pliku null lub pliku, ktory jest na EOF podczas
testowania jego uchwytu. Z uwagi na to, e dla testu -T trzeba
odczyta plik, w wikszoci przypadkow uywa si najpierw -f, jak w
next unless -f $file && -T $file.
Jeli ktory z operatorow testu plikow (lub stat() czy lstat())
otrzymalby specjalny uchwyt pliku, skladajcy si z samego
podkrelenia, to uyta zostalaby struktura `stat' z poprzedniego
testu pliku, oszczdzajc wywolania systemowego. (Nie dziala to
dla -t, a ponadto powiniene pamita, e lstat() i -l zostawiaj w
strukturze wartoci dla dowiza symbolicznych, a nie
rzeczywistych plikow.) Przyklad:
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 modul argumentu. Jeli parametr WARTO zostanie pominity,
to uywane jest $_.
accept NOWEGNIAZDO,GNIAZDO
Przyjmuje nadchodzce polczenie na gniedzie, podobnie jak
wywolanie systemowe accept(2). Po sukcesie zwraca spakowany
adres, a w razie poraki FALSE. Przyklad uycia mona znale w
sekcji Sockets: Client/Server Communication strony podrcznika
perlipc(1).
alarm SEKUNDY
alarm Powoduje, e sygnal ALARM jest dostarczany do tego procesu po
okrelonej liczbie sekund. Jeli nie podano parametru sekund,
uywana jest warto zachowana w $_. (Niestety na niektorych
maszynach czas moe by do sekundy krotszy ni ten, ktory podasz,
zalenie od sposobu zliczania sekund.) Naraz odlicza moe tylko
jeden zegar. Kade wywolanie wylcza poprzedni zegar, a argument
0 wylcza poprzedni zegar bez uruchamiania nowego. Zwrocona
warto jest iloci czasu, pozostajcego poprzedniemu zegarowi.
Dla oponie lub wikszej dokladnoci ni jedna sekunda, moesz uy
perlowego interfejsu syscall(), i dosta si do setitimer(2), o
ile twoj system to obsluguje. W przeciwnym wypadku obejrzyj
opis select(), gdzie w tym dokumencie. Ogolnie czstym bldem
jest lczenie wywola alarm() i sleep().
Jeli chcesz uywa alarm() do timeout'owania wywolania
systemowego, musisz uy pary eval/die. Nie mona oczekiwa, e
alarm spowoduje, e wywolanie systemowe si zakoczy, z $!
ustawionym na EINTR, gdy na niektorych systemach perl ustawia
obslug sygnalow tak, e wywolania systemowe s restartowane.
Uywanie eval/die dziala 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 bldy
if ($@) {
# timeout
}
else {
# bez timeouta
}
atan2 Y,X
Zwraca arcus tangens z Y/X, w zakresie -pi do pi.
Dla operacji tangens, moesz uy funkcji POSIX::tan(), lub uy
znanej relacji:
sub tan { sin($_[0]) / cos($_[0]) }
bind GNIAZDO,NAZWA
Przywizuje adres sieciowy do gniazda, podobnie jak wywolanie
systemowe bind(2). Po sukcesie zwraca TRUE, a w przeciwnym
wypadku FALSE. NAZWA powinna by spakowanym adresem, typu
odpowiedniego dla gniazda. Zobacz przyklady w sekcji Sockets:
Client/Server Communication na stronie podrcznika perlipc(1).
binmode UCHWYTYPLIKU
Powoduje, e plik przelcza si w tryb binarny zapisu/odczytu. Ma
to miejsce w systemach operacyjnych, ktore dokonuj takiego
rozronienia. Pliki, ktore nie s w trybie binarnym, ukrywaj
wejciowe sekwencje CR LF pod LF, a sekwencje wyjciowe LF s
tlumaczone na CR LF. Tryb binarny nie wplywa na nic pod Unixem;
jednak pod MS-DOS i innymi archaicznymi systemami, moe to by
niezbdna wlaciwo--w przeciwnym wypadku twoja biblioteka C moe
znieksztalci plik. Kluczem do rozroniania systemow, ktore
potrzebuj trybu binarnego od tych, ktore 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.
Jeli UCHWYTPLIKU jest wyraeniem, to warto brana jest jako nazwa
uchwytu pliku.
bless REF,NAZWAKLASY
bless REF
Funkcja ta mowi rzeczy, wskazywanej przez referencj REF, e jest
teraz obiektem w pakiecie NAZWAKLASY--lub w biecym pakiecie,
jeli nie podano parametru nazwy klasy. Funkcja zwraca dla
pewnoci referencj, gdy jest ona czsto ostatni rzecz w
konstruktorze. Jeli blogoslawiona funkcja ma by dziedziczona w
klasach potomnych, to zawsze uywaj wersji dwuargumentowej tej
funkcji. Dla dalszych informacji o blogoslawieniu obiektow
zobacz stron perlobj(1).
caller WYRA
caller Zwraca kontekst biecego wywolania podprocedury. W kontekcie
skalarnym, jeli bylo wywolanie, tj. jeli jestemy w
podprocedurze lub eval() lub require(), zwraca nazw pakietu
wywolujcego, a w przeciwnym razie warto niezdefiniowan. W
kontekcie listowym, zwraca
($pakiet, $nazwapliku, $linia) = caller;
Z parametrem WYRA zwraca troch dodatkowych danych, z ktorych
korzysta debugger do drukowania ladu stosu. Warto WYRA
wskazuje, o ile ramek wywola naley si cofn od biecej.
($pakiet, $nazwapliku, $linia, $podprocedura,
$maargumenty, $chcetabli, $teksteval, $jest_require) = caller($i);
$podprocedura tutaj moe by "(eval)", jeli ramka nie jest
wywolaniem podproceduralnym. W tej sytuacji ustawiane s
dodatkowe elementy, $teksteval i $jest_require: $jest_require
jest prawdziwe, jeli ramka zostala 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 kada
instrukcja use tworzy ramk require. (wewntrz ramki eval WYRA)
Co wicej, po wywolaniu z pakietu DB, caller zwraca jeszcze
dokladniejsze dane: ustawia zmienn listow @DB::args na
argumenty, z ktorymi wywolano podprocedur.
chdir WYRA
Zmienia katalog roboczy na WYRA. Jeli WYRA jest pominite, to
zmienia katalog na katalog domowy. Po sukcesie zwraca TRUE, a w
przeciwnym wypadku FALSE. Zobacz przyklad przy opisie die().
chmod LISTA
Zmienia prawa listy plikow. Pierwszy element listy musi by
numerycznym zapisem praw, ktory powinien by liczb osemkow, a
ktory z pewnoci nie powinien by lacuchem cyfr osemkowych: 0644
jest ok, ale '0644' nie jest. Zwraca liczb plikow, ktorych
prawa zmieniono. Jeli wszystkim co masz jest lacuch, zobacz te
wpis oct, znajdujcy 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 zakoczenia
linii, ktore odpowiadaj biecej wartoci $/ (znanego te jako
$INPUT_RECORD_SEPARATOR w module English). Zwraca calkowit
liczb znakow, usunitych ze wszystkich argumentow. Czsto jest
uywany do usuwania nowych linii z koca rekordu wejciowego jeli
obawiasz si, e rekordowi moe jej brakowa. W trybie `paragraph'
($/ = ""), usuwa wszystkie koczce znaki nowych linii z
lacuchow. Jeli pominita zostanie ZMIENNA, to ucinane jest $_.
Przyklad:
while (<>) {
chomp; # zapobiegaj \n na ostatnim polu
@array = split(/:/);
...
}
Moesz w zasadzie uci wszystko co jest lwartoci, wlczajc
przypisanie:
chomp($cwd = `pwd`);
chomp($answer = <STDIN>);
Jeli ucinasz list, obcinany jest kady element, a zwracana jest
lista usunitych znakow.
chop ZMIENNA
chop LISTA
chop Odrywa ostatni znak lacucha i zwraca jego warto. Jest przede
wszystkim uywany do usuwania nowej linii z koca rekordu
wejciowego, lecz jest duo bardziej efektywny ni s/\n//, poniewa
ani nie skanuje, ani nie kopiuje lacucha. Jeli pominito ZMIENN,
odrywa $_. Przyklad:
while (<>) {
chop; # zapobie \n na ostatnim polu
@array = split(/:/);
...
}
Moesz w zasadzie oderwa cokolwiek, co jest lwartoci, wlczajc
przypisanie:
chop($cwd = `pwd`);
chop($answer = <STDIN>);
Jeli obrywasz list, obrywany jest kady element. Zwracana jest
tylko warto ostatniego oderwania.
Zauwa, e chop zwraca ostatni znak. Aby zwroci wszystkie poza
ostatnim, uyj substr($lancuch, 0, -1).
chown LISTA
Zmienia wlaciciela (i grup) listy plikow. Pierwsze dwa
argumenty listy musz by NUMERYCZNYMI uid i gid, podanym w tej
kolejnoci. Zwraca liczb plikow, na ktorych powiodla si
zamiana.
$cnt = chown $uid, $gid, 'foo', 'bar';
chown $uid, $gid, @filenames;
Oto przyklad, ktory podglda nienumeryczne uid'y w pliku z
haslami:
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 plikow
chown $uid, $gid, @ary;
Na wikszoci systemow nie moesz zmienia wlacicielstwa, chyba e
jeste superuytkownikiem, cho powiniene by w stanie zmienia grup
na dowoln z twoich drugorzdnych grup. Na niezabezpieczonych
systemach ograniczenia te mog by mniejsze, lecz nie jest to
przenone zaloenie.
chr LICZBA
chr Zwraca znak, reprezentowany przez LICZB w zbiorze znakow. Na
przyklad, chr(65) to "A" w ASCII. Dla odwrocenia tego
dzialania, uyj ord, ktore jest opisane gdzie indziej w tym
dokumencie.
Jeli pominito LICZB, to uywane jest $_.
chroot NAZWAPLIKU
chroot Funkcja ta dziala tak samo jak wywolanie systemowe chroot(2):
powoduje, e podany katalog staje si nowym katalogiem glownym
dla wszelkich nowych cieek, ktore bd si zaczynaly od "/". Tyczy
si to twojego procesu i jego dzieci. Ze wzgldow bezpieczestwa,
wywolanie to jest zastrzeone dla superuytkownika. Jeli pominito
NAZWPLIKU, to uywany jest $_.
close UCHWYTPLIKU
Zamyka plik lub potok zwizany z uchwytem, zwracajc TRUE jedynie
w wypadku, gdy stdio da rad oproni wszystkie bufory i zamkn
systemowy deskryptor pliku. Jeli uchwyt pliku pochodzil od
otwartego potoku, funkcja zwroci FALSE jeli ktore z potrzebnych
wywola systemowych zawiedzie lub jeli program zakoczy prac z
niezerowym statusem. (Jeli problemem jest fakt, e program
skoczyl si z niezerowym kodem, to $! bdzie ustawione na 0.)
Nie musisz zamyka UCHWYTUPLIKU, jeli chcesz go zaraz potem
wykorzysta do innego otwarcia open(), poniewa funkcja open()
zamknie go za ciebie. Jednak jawne zamknicie pliku wejciowego
resetuje licznik linii ($.), podczas gdy niejawne zamknicie w
open() tego nie robi. Poza tym, zamykanie potoku powoduje
oczekiwanie na zakoczenie procesu z potoku, na wypadek gdyby
chcial poniej obejrze wyjcie potoku. Jawne zamykanie potoku
wstawia warto statusu komendy do $?. Przyklad:
open(OUTPUT, '|sort >foo'); # potok do `sort'
... # drukuj rone rzeczy na wyjcie
close OUTPUT; # czekaj na zakoczenie `sort'
open(INPUT, 'foo'); # pobierz wyniki sortowania
UCHWYTPLIKU moe by wyraeniem, ktorego warto daje rzeczywist
nazw uchwytu pliku.
closedir UCHWYTKATALOGU
Zamyka katalog, otworzony funkcj opendir().
connect GNIAZDO,NAZWA
Probuje polczy si ze zdalnym gniazdem, zupelnie tak jak
wywolanie systemowe connect(2). Po sukcesie zwraca TRUE, a w
przeciwnym wypadku FALSE. NAZWA powinna by spakowanym typem
adresu, odpowiednim dla gniazda. Zobacz przyklady w sekcji
Sockets: Client/Server Communication na stronie podrcznika
perlipc(1).
continue BLOK
W rzeczywistoci jest to instrukcja kontroli wykonywania
programu, a nie funkcja. Jeli do BLOKU dolczone jest continue
BLOK (zazwyczaj we while lub foreach), to jest zawsze
wykonywany tu przed kolejnym wykonaniem warunku, zupelnie jak
trzecia cz ptli for w C. Tak wic moe by uywane do zwikszania
zmiennej ptli, nawet gdy ptla byla kontynuowana z pomoc
instrukcji next (ktora jest podobna do instrukcji continue z
C).
cos WYRA
Zwraca cosinus z WYRA (wyraonego w radianach). Jeli pominie si
argument WYRA, to uywany jest $_.
Dla operacji arcus cosinus, moesz uy funkcji POSIX::acos(), lub
nastpujcej relacji:
sub acos { atan2( sqrt(1 - $_[0] * $_[0]), $_[0] ) }
crypt CZYSTYTEKST,SALT
Koduje lacuch na wzor funkcji crypt(3) z biblioteki C. Moe to
by uyteczne np. do sprawdzania plikow z haslami w poszukiwaniu
slabych hasel. Robi to powinni tylko ludzie noszcy biale
kapelusze.
Zauwa, e crypt jest funkcj jednokierunkow, podobnie jak
rozbijanie jajek na omlet. Nie istnieje (znana) funkcja
dekodujca. W wyniku, funkcja wcale nie jest tak uyteczna do
kryptografii. (Dla tego, zobacz najbliszy mirror CPAN.)
Oto przyklad, ktory daje pewno, e ktokolwiek uruchomi ten
program, zna swoje wlasne haslo:
$pwd = (getpwuid($<))[1];
$salt = substr($pwd, 0, 2);
system "stty -echo";
print "Haslo: ";
chop($word = <STDIN>);
print "\n";
system "stty echo";
if (crypt($word, $salt) ne $pwd) {
die "Niezmiernie mi przykro...\n";
} else {
print "ok\n";
}
Oczywicie wpisywanie swojego hasla za kadym razem, gdy kto o
nie poprosi jest niemdre.
dbmclose HASH
[Funkcja ta jest przedawniona przez funkcj untie().]
Przerywa powizanie midzy plikiem DBM a tablic asocjacyjn.
dbmopen HASH,NAZWADB,PRAWA
[funkcja ta jest przedawniona przez funkcj tie().]
Lczy to plik dbm(3), ndbm(3), sdbm(3), gdbm(), lub Berkeley DB
z tablic asocjacyjn. HASH jest nazw tablicy asocjacyjnej. (w
przeciwiestwie do normalnego otwierania, pierwszy argument NIE
jest uchwytem pliku, cho wyglda podobnie). NAZWADB jest nazw
bazy danych (bez rozszerze w rodzaju .dir czy .pag). Jeli baza
nie istnieje, to jest tworzona z prawami okrelanymi przez PRAWA
(zmodyfikowanymi przez umask()). Jeli twoj system obsluguje
tylko starsze funkcje DBM, to moesz w swoim programie wykona
tylko jeden dbmopen(). W starszych wersjach perla, jeli system
nie mial ani DBM, ani ndbm, wywolanie dbmopen powodowalo bld
krytyczny; teraz schodzi do sdbm(3).
Jeli nie masz prawa zapisu do pliku DBM, to moesz tylko
odczytywa zmienne asocjacyjne, nie moesz ich ustawia. Jeli
chcesz sprobowa, czy moesz zapisywa, uyj albo testow plikowych,
albo sprobuj ustawi probny wpis asocjacyjny wewntrz eval(), co
przechwyci bld.
Zauwa, e funkcje takie, jak keys() i values() mog zwraca w
uyciu z plikami DBM wielkie tablice. Moesz do iteracji przez
wielkie pliki DBM uywa take each(). Przyklad:
# 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 podrcznika AnyDBM_File -- jest tam bardziej
ogolny opis wad i zalet ronych podej dbm. Zobacz te stron
DB_File, dla bogatej implementacji.
defined WYRA
defined Zwraca warto logiczn, mowic czy WYRA ma warto inn od
niezdefiniowanej undef. Jeli WYRA nie jest obecne, to testowane
jest $_.
Wiele operacji zwraca undef aby wskaza bld, koniec pliku, bld
systemowy, niezainicjalizowan zmienn i inne wyjtki. Funkcja ta
pozwala odroni undef od innych wartoci. (Prosty test logiczny
nie rozroni undef, zero, pustego lacucha, i "0", ktore
wszystkie s jednakowo falszywe.) Zauwa, e poniewa undef jest
prawidlowym skalarem, to jego obecno niekoniecznie musi
wskazywa warunek wyjtkowy: pop() zwraca undef gdy jego argument
jest pust tablic, lub gdy zwracany element jest wartoci Wundef.
defined() mona uywa te do sprawdzania czy podprocedura
wychodzi. Z drugiej strony, uywanie defined() na agregatach
(tablicach asocjacyjnych i tablicach) nie musi zwroci zgodnych
z intuicj wynikow i powinno si go w tych przypadkach unika.
Gdy uywane na elemencie tablicy asocjacyjnej, mowi czy warto
jest zdefiniowana, a nie czy taki klucz istnieje w tablicy. Dla
tego celu, uyj exists, ktore jest opisane gdzie indziej w tym
dokumencie.
Przyklady:
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 naduywa defined(), a potem s oni zaskoczeni,
e liczba 0 i "" (lacuch o dlugoci zero) s w rzeczywistoci
wartociami zdefiniowanymi. Na przyklad, jeli powiesz
"ab" =~ /a(.*)b/;
to porownanie wzorca si powiedzie i $1 bdzie zdefiniowane,
niezalenie od tego, e trafilo w "nic". W rzeczywistoci nie mona
powiedzie, e trafilo w "nic". Raczej trafilo w co, o dlugoci
zera znakow. Jest to wszystko bardzo czyste i uczciwe. Gdy
funkcja zwraca warto niezdefiniowan, jest to przyznanie si, e
nie mogla da uczciwej odpowiedzi. Tak wic powiniene uywa
defined() tylko jeli sprawdzasz dzialanie tego, co probujesz
osign. W niektorych wypadkach, rzecz, ktorej oczekujesz jest
proste porownanie z 0 lub "".
Obecnie uywanie defined() na calej tablicy lub tablicy
asocjacyjnej, zglasza tylko czy zostala dla niego zaalokowana
pami. Tak wic tablica, ktor ustawiasz na pust list jest
pocztkowo niezdefiniowana, a gdy si zapelni, staje si
zdefiniowana. Zamiast tego powiniene uy prostego testu
rozmiaru:
if (@an_array) { print "ma elementy tablicowe\n" }
if (%a_hash) { print "ma elementy asocjacyjne\n" }
Uycie na nich undef() powoduje wyczyszczenie ich pamici i
zgloszenie, e nie s ju zdefiniowane. Nie powinno si jednak tego
robi, chyba e nie masz zamiaru ich wicej uywa, poniewa po
prostu szybciej jest uywa pamici gotowej do wypelnienia, ni
alokowa j od nowa.
Zachowanie defined() na agregatach moe zosta zmienione,
poprawione, lub zepsute w nastpnych wersjach perla.
Zobacz te opisy undef, exists, i ref, znajdujce si w innych
miejscach tego dokumentu.
delete WYRA
Kasuje podany klucz(e) i zwizane z nim wartoci z tablicy
asocjacyjnej. Dla kadego klucza, zwracana jest skasowana warto
zwizana z kluczem albo warto niezdefiniowana, jeli taki klucz
nie istnial. Kasowanie z $ENV{} modyfikuje rodowisko. Kasowanie
z tablicy asocjacyjnej, podlczonej do pliku DBM, kasuje wpis z
pliku. (lecz kasowanie z takiego pliku nie musi zwraca
niczego.)
Nastpujcy przyklad kasuje wszystkie wartoci tablicy
asocjacyjnej:
foreach $key (keys %HASH) {
delete $HASH{$key};
}
Podobnie robi nastpujce:
delete @HASH{keys %HASH}
(Ale obydwa s wolniejsze ni komenda undef().) Zauwa, e WYRA
moe by arbitralnie skomplikowany tak dlugo, dopoki kocowa
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 obrbem eval() drukuje warto LISTY na STDERR i koczy prac z
biec wartoci $! (errno). Jeli $! wynosi 0, to koczy z wartoci
($? >> 8) (status poprzedniej `komendy`). Jeli ($? >> 8) jest
zerem, to koczy z wartoci 255. Wewntrz eval, komunikat o
bldzie jest pakowany do $@, a eval() jest przerywany wartoci
niezdefiniowan; powoduje to, e die() moe podnie wyjtek.
Rownowane przyklady:
die "Nie mog przej do spool: $!\n" unless chdir '/usr/spool/news';
chdir '/usr/spool/news' or die "Nie mog przej do spool: $!\n"
Jeli warto WYRA nie koczy si now lini, drukowany jest rownie
numer biecej linii skryptu i wejcia, a za nimi doklejana jest
nowa linia. Wskazowka: Czasami dodanie ", stopped" do twojego
komunikatu moe nada mu wicej sensu po doklejeniu lacucha "at
foo line 123". Zalomy, 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 take exit() i warn().
Mona zaaranowa spraw tak, e callback bdzie wywolywany tu przed
uczynieniem swojej powinnoci przez die(). Naley w tym celu
ustawi hak $SIG{__DIE__}. Zwizany handler zostanie wywolany z
tekstem bldu i moe zmieni tre komunikatu bldu, wywolujc die()
ponownie. Zobacz stron perlvar(1), dla dalszych detali o
ustawianiu wpisow %SIG, a take opis eval() dla paru przykladow.
do BLOK Nie jest to funkcja. Zwraca warto ostatniej komendy w sekwencji
komend, wskazywanych przez BLOK. Po zmodyfikowaniu przez
modyfikator ptli, wywoluje jednokrotnie BLOK przed sprawdzeniem
warunku ptli. (W innych instrukcjach modyfikatory ptli
sprawdzaj warunek na samym pocztku.)
do PODPROCEDURA(LISTA)
Niezalecana forma wywolania podprocedury. Zobacz stron
perlsub(1).
do WYRA Uywa wartoci WYRA jako nazwy pliku i wykonuje zawarto tego
pliku jako skrypt perla. Podstawowym zadaniem tej instrukcji
jest wlczanie podprocedur z bibliotek perla.
do 'stat.pl';
jest zupelnie jak
eval `cat stat.pl`;
tylko troch bardziej efektywne, utrzymuje ledzenie biecej nazwy
plikow dla komunikatow o bldach i przeszukuje wszystkie
katalogi -I, jeli plik nie znajduje si w katalogu biecym
(zobacz take tablic @INC w sekcji Predefined Names podrcznika
perlvar(1)). Jednak jest takie samo w sensie, e przetwarza
(parses) plik za kadym razem, gdy go wywolasz, wic
przypuszczalnie nie chcialby tego wewntrz ptli.
Zauwa, e wlczanie modulow bibliotecznych mona zalatwi lepiej z
pomoc operatorow use() i require(), ktore rownie dokonuj
sprawdzania bldow i powoduj wyjtki jeli jest jaki problem.
dump ETYKIETA
Powoduje to natychmiastowy zrzut core. Jest to po to, by mogl
uy programu undump do konwertowania zrzutu core do pliku
binarnego po zainicjalizowaniu wszystkich zmiennych z pocztku
programu. Po uruchomieniu nowego binarium, rozpocznie si ono od
wywolania goto ETYKIETA (ze wszystkimi ograniczeniami, na ktore
cierpi goto). Myl o tym, jak o goto z interweniujcym zrzutem
core i reinkarnacj. Jeli ETYKIETA jest pominita, program
restartuje si od pocztku. UWAGA: wszelkie pliki, ktore byly
otwarte w momencie zrzutu core nie bd otwarte w nowej
inkarnacji programu, powodujc przypuszczalnie zamieszanie w
czci perla. Zobacz te opcj -u ze strony perlrun(1).
Przyklad:
#!/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 wywolaniu w kontekcie listowym, zwraca dwuelementow tablic,
skladajc si z klucza i wartoci nastpnego elementu
asocjacyjnego, tak e moesz iterowa poprzez tablic. Po wywolaniu
w kontekcie skalarnym, zwraca tylko klucz dla nastpnego
elementu asocjacyjnego. (Uwaga: Klucze mog mie warto "0" lub
"", co jest logicznie nieprawidlowe; moesz w tym celu chcie
zapobiec konstrukcjom jak while ($k = each %foo) {} .)
Wpisy s zwracane w kolejnoci do losowej. Gdy tablica
asocjacyjna jest calkowicie odczytana, w kontekcie listowym
zwracana jest tablica null (co po przypisaniu daje warto FALSE
(0)), a w kontekcie skalarnym zwracany jest undef. Nastpne
wywolanie each() po tym rozpocznie iterowanie od nowa. Dla
kadej tablicy asocjacyjnej istnieje pojedynczy iterator,
dzielony przez funkcje each(), keys() i values(); moe by
zresetowany przez odczytanie wszystkich elementow tablicy lub
przez wywolanie keys HASH lub values HASH. Jeli dodajesz, lub
kasujesz elementy tablicy asocjacyjnej podczas jej iterowania,
to moe si zdarzy, e niektore wpisy utracisz, a niektore
dostaniesz zduplikowane. Nie rob wic tego.
Nastpujcy przyklad drukuje rodowisko, podobnie jak program
printenv(1), lecz w odwrotnej kolejnoci:
while (($key,$value) = each %ENV) {
print "$key=$value\n";
}
Zobacz te keys() i values().
eof UCHWYTPLIKU
eof ()
eof Zwraca 1, jeli nastpny odczyt z UCHWYTUPLIKU zwroci koniec
pliku (eof) lub jeli UCHWYTPLIKU nie jest otwarty. UCHWYTPLIKU
moe by wyraeniem, ktorego warto daje prawdziw nazw uchwytu
pliku. (Zauwa, e ta funkcja w rzeczywistoci odczytuje znak, a
potem wstawia go z powrotem, wic nie jest zbyt uyteczna w
kontekcie interaktywnym.) Nie czytaj z pliku terminalowego
(lub nie wolaj eof(UCHWYTPLIKU)) po osigniciu koca pliku. Pliki
takie, jak terminale mog po takim zabiegu utraci warunek koca
pliku.
eof bez argumentow, uywa jako argumentu ostatniego odczytu
pliku. Puste nawiasy () mog wskazywa na pseudo plik, zloony z
plikow, wymienionych w linii komend, np. eof() dobrze jest uywa
wewntrz ptli while (<>), aby wykry koniec ostatniego pliku.
Przyklady:
# resetuj numerowanie linii dla kadego pliku wejciowego
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;
}
Wskazowka praktyczna: w perlu prawie nigdy nie trzeba uywa eof,
poniewa operatory wejciowe zwracaj undef gdy nie bd mialy wicej
danych.
eval WYRA
eval BLOK
WYRA jest przetwarzany i wykonywany tak, jakby byl malekim
programem perla. Jest wywolywany w kontekcie biecego programu
perla, wic wszelkie ustawienia zmiennych lub definicje
podprocedur i formatow zostaj dalej. Zwracana warto jest
wartoci ostatniego wykonanego wyraenia, lub wartoci, przekazan
przez return, czyli tak jak w podprocedurach. Ostatnie wyraenie
jest wykonywane w kontekcie skalarnym, lub tablicowym, zalenie
od kontekstu eval.
Jeli pojawi si bld skladni lub bld czasu dzialania albo jeli
wykonana zostanie instrukcja die(), to zwrocona zostanie warto
niezdefiniowana, a $@ zostanie ustawione na komunikat o bldzie.
Jeli nie bylo bldu, $@ bdzie lacuchem null. Jeli WYRA zostanie
pominite, to wykonywane jest $_. Ostatni rednik, jeli taki
istnieje, moe by pominity w wyraeniu. Ostrzegam jednak, e
uywanie eval() nie wycisza perla od drukowania ostrzee na
STDERR, ani nie upycha tekstu tych komunikatow do $@. Aby
zrobi ktor z tych rzeczy, musisz uy zabudowania $SIG{__WARN__}.
Zobacz warn() i stron perlvar(1).
Zauwa, e poniewa eval() przechwytuje krytyczne (w innych
wypadkach) bldy, to jest przydatny dla okrelania czy konkretna
wlaciwo (taka, jak np. socket(), symlink(), itp. jest
zaimplementowana. Jest to rownie mechanizm perla obslugiwania
wyjtkow, gdzie operator die jest mechanizmem ich podnoszenia.
Jeli wykonywany kod si nie roni, moesz uy postaci eval-BLOK do
wychwytywania bldow czasu dzialania, bez potrzeby rekompilacji
za kadym razem. Bld, jeli si pojawi, jest wci zwracany w $@.
Przyklady:
# spowoduj, by dzielenie przez zero nie bylo krytyczne
eval { $answer = $a / $b; }; warn $@ if $@;
# to samo, mniej efektywnie
eval '$answer = $a / $b'; warn $@ if $@;
# bld czasu kompilacji
eval { $answer = };
# bld czasu dzialania
eval '$answer ='; # ustawia $@
Uywajc postaci eval{} jako pulapki na wyjtki w bibliotekach,
moesz nie yczy sobie uruchamiania hakow __DIE__, ktore mogl
sobie ustawi uytkownik. Dla tego celu mona wykorzysta
konstrukcj local $SIG{__DIE__}. Przyklad:
# bardzo prywatna pulapka na wyjtek dzielenia przez zero
eval { local $SIG{'__DIE__'}; $answer = $a / $b; }; warn $@ if $@;
Jest to szczegolnie istotne, gdy haki __DIE__ mog wywolywa
die() ponownie, co ma efekt zmieniania komunikatow o bldach:
# haki __DIE__ mog modyfikowa komunikaty o bldach
{
local $SIG{'__DIE__'} = sub { (my $x = $_[0]) =~ s/foo/bar/g; die $x };
eval { die "foo foofs here" };
print $@ if $@; # drukuje "bar barfs here"
}
Uywajc eval(), powiniene szczegolnie uwaa, by pamita 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 oglupiajce cudzyslowy,
powodujce, e czytelnik zastanawia si, co jeszcze moe si zdarzy
(nic nie moe).) Przypadki 3 i 4 zachowuj si podobnie: wykonuj
one kod '$x', ktory nie robi nic poza zwroceniem wartoci $x.
(Przypadek 4 jest preferowany ze wzgldow estetycznych, ma te
zalet kompilowania podczas kompilacji, a nie podczas
dzialania.) Przypadek 5 jest miejscem, gdzie normalnie chcialby
uy cudzyslowow, poza tym, e w tej konkretnej sytuacji mona uy
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 bezporednio,
zamiast przez /bin/sh -c (patrz niej). Jeli chcesz powroci,
uyj zamiast exec() instrukcji system().
Jeli w LICIE jest wicej ni jeden argument, lub jeli jest to
tablica z wicej ni jedn wartoci, wywolywany jest execvp(3) (z
argumentami z LISTY). Jeli jest tylko jeden argument skalarny,
to jest on sprawdzany w poszukiwaniu metaznakow powloki. Jeli
s tam jakie znaki, to caly argument jest przekazywany do
przetworzenia przez /bin/sh -c. Jeli nie ma adnych metaznakow,
to argument jest dzielony na slowa i przekazywany bezporednio
do execvp(3), co jest bardziej efektywne. Uwaga: exec() i
system() nie oproniaj twojego bufora wejciowego, wic moliwe, e
aby zapobiec utracie wyjcia, bdziesz musial ustawi $|.
Przyklady:
exec '/bin/echo', 'Twoimi argumentami s: ', @ARGV;
exec "sort $outfile | uniq";
Jeli tak naprawd nie potrzebujesz wywola pierwszego argumentu,
lecz chcesz oszuka program, ktory wykonujesz co do jego nazwy,
to moesz poda program, ktory chcesz wywola jako "obiekt
niebezporedni" (bez przecinka) na samym pocztku LISTY. (Wymusza
to zawsze interpretacj LISTY jako listy wielowartociowej, nawet
jeli jest tam tylko pojedynczy skalar.) Przyklad:
$shell = '/bin/csh';
exec $shell '-sh'; # udaj, e to powloka loginowa
lub, bardziej bezporednio,
exec {'/bin/csh'} '-sh'; # udaj, e to powloka loginowy
exists WYRA
Zwraca TRUE, jeli podany klucz asocjacyjny istnieje w tablicy
asocjacyjnej. Warto jest prawdziwa nawet gdy odpowiadajca
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 moe by prawdziwy tylko wtedy, gdy jest
zdefiniowany, a zdefiniowany jeli istnieje, lecz odwrotna
kolejno niekoniecznie jest prawdziwa.
Zauwa, e WYRA moe by skomplikowany tak daleko, dopoki
ostateczna operacja jest podejrzeniem klucza asocjacyjnego:
if (exists $ref->[$x][$y]{$key}) { ... }
exit WYRA
Wykonuje WYRA i koczy prac z t wartoci. (W rzeczywistoci,
wywoluje najpierw zdefiniowane procedury END, lecz procedury te
mog przerwa koczenie. Podobnie, rownie przed wyjciem wolane s
wszelkie destruktory obiektow.) Przyklad:
$ans = <STDIN>;
exit 0 if $ans =~ /^[Xx]/;
Zobacz te die(). Jeli WYRA jest pominite, to praca koczy si
statusem 0. Jedynymi, uniwersalnymi i przenonymi wartociami
WYRA s 0 dla sukcesu i 1 dla bldu; wszelkie inne s podstaw do
dziwnych interpretacji, zalenych od rodowiska, w ktorym program
jest uruchomiony.
Nie powiniene uywa exit() do przerywania podprocedury, jeli
istnieje szansa, e kto moglby chcie ustawi pulapk na bld.
Zamiast tego uyj die(), ktory moe by przechwycony przez eval().
exp WYRA
exp Zwraca e (naturalna podstawa logarytmu) do potgi WYRA. Jeli
WYRA jest pominite, zwraca exp($_).
fcntl UCHWYTPLIKU,FUNKCJA,SKALAR
Implementuje funkcj fcntl(2). Przypuszczalnie bdziesz musial
zaznaczy
use Fcntl;
aby moc si ni poslugiwa. Przetwarzanie argumentow i zwracanie
wartoci dziala zupelnie jak w ioctl(), opisanym niej. Zauwa, e
fcntl() da bld krytyczny po uyciu na maszynie, nie
implementujcej fcntl(2). Na przyklad:
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(). Jeli UCHWYTPLIKU jest
wyraeniem, to jego warto brana jest za nazw uchwytu pliku.
flock UCHWYTPLIKU,OPERACJA
Wywoluje flock(2), lub emuluje go dla uchwytu UCHWYTPLIKU.
Zwraca TRUE po sukcesie, FALSE w wypadku jakiego problemu. Na
maszynach nie implementujcych blokowania flock(2), fcntl(2),
lub lockf(3), powoduje bld krytyczny. flock() jest przenonym
perlowym interfejsem blokowania plikow, cho blokuje tylko cale
pliki, a nie rekordy.
OPERACJA jest jedn z LOCK_SH, LOCK_EX, lub LOCK_UN. Moliwa jest
jeszcze kombinacja z LOCK_NB. Stale te maj tradycyjne wartoci
1, 2, 8 i 4, lecz moesz uywa nazw symbolicznych po
zaimportowaniu ich z modulu Fcntl, robic to albo pojedynczo,
albo grupowo, uywajc tagu ':flock' . LOCK_SH da blokady
dzielonej, LOCK_EX da blokady na wylczno, a LOCK_UN zwalnia
poprzednio zadan blokad. Jeli do LOCK_SH lub LOCK_EX dodany
zostanie LOCK_NB, to flock nie bdzie blokowal, oczekujc na
zablokowanie, lecz zakoczy dzialanie natychmiast (aby dowiedzie
si, czy uzyskale blokad, sprawd status wyjcia).
Aby zapobiec prawdopodobnie dekoordynacji, perl opronia
UCHWYTPLIKU przed jego (od)blokowaniem.
Zauwa, e emulacja zbudowana za pomoc lockf(3) nie daje blokad
dzielonych i wymaga, by UCHWYTPLIKU byl otwarty z zamiarem
zapisu. Jest to semantyka, ktor implementuje lockf(3). Wikszo
(wszystkie?) systemow jednak implementuje lockf(3) na zasadach
blokowania fcntl(2), wicej ronice nie powinny si dawa we znaki.
Zauwa te, e niektore wersje flock() nie mog blokowa rzeczy
poprzez sie; bdziesz musial uy do tego bardziej specyficznego
dla systemu fcntl(). Jeli chcesz, moesz zmusi perla do
ignorowania systemowej funkcji flock(2) i uywa jego wlasnej,
opartej o fcntl(2) emulacji. Robi si to, podajc programowi
Configure przelcznik -Ud_flock. Trzeba to oczywicie zrobi
podczas konfigurowania perla jako takiego.
Oto doklejacz mailboxa dla systemow BSD.
use Fcntl ':flock'; # importuj stale LOCK_*
sub lock {
flock(MBOX,LOCK_EX);
# a w wypadku, gdyby kto dokleil
# 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 podrcznika. S tam inne przyklady flock().
fork Wykonuje wywolanie systemowe fork(2). Zwraca procesowi
rodzicielskiemu pid dziecka, a w wtku dziecka zwraca zero. W
wypadku bldu, zwraca undef. Uwaga: nieopronione bufory
pozostaj nieopronione w obydwu procesach, co znaczy, e bdziesz
musial ustawi $| ($AUTOFLUSH w English) lub wywola metod
autoflush() z IO::Handle aby zapobiec duplikacji wyjcia.
Jeli fork()'ujesz bez czekania na dzieci, zbierzesz zombies.
(Osierocone procesy.)
$SIG{CHLD} = sub { wait };
Istnieje te trik podwojnego forka (sprawdzanie bldow forka
zostalo pominite);
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 podrcznika perlipc(1). S tam dalsze przyklady
forkowania i zbierania konajcych dzieci.
Zauwa, e jeli twoje forkowane dziecko dziedziczy systemowe
deskryptory plikow, takie jak STDIN i STDOUT, ktore w
rzeczywistoci s polczone potokiem lub gniazdem, to jeli
skoczysz dzialanie, zdalny serwer (taki jak httpd, rsh) nie
bdzie mylal, e rzeczywicie skoczyle. Powiniene je otworzy na
nowo na /dev/null.
format Zadeklaruj format obrazka, uywanego z funkcj write(). Na
przyklad:
format Something =
Test: @<<<<<<<< @||||| @>>>>>
$str, $%, '$' . int($num)
.
$str = "widget";
$num = $cost/$quantity;
$~ = 'Something';
write;
Dla dalszych opisow i przykladow, zobacz stron perlform(1).
formline OBRAZEK,LISTA
Jest to funkcja wewntrzna, uywana przez formaty. Mona j jednak
wywola te samodzielnie. Formatuje ona (zobacz stron
perlform(1)) list wartoci zalenie od zawartoci OBRAZKA,
umieszczajc wyjcie w akumulatorze wyjcia formatowego, $^A
($ACCUMULATOR w English). Ostatecznie, po dokonaniu write(),
zawarto $^A jest zapisywana do jakiego uchwytu pliku. Moesz
jednak odczyta go samodzielnie i ustawi na "". Zauwa, e format
zazwyczaj wykonuje jeden formline() na kad lini formy, lecz
sama funkcja fromline nie zwraca uwagi na to, ile nowych linii
jest osadzonych w OBRAZKU. Znaczy to, e tokeny ~ i ~~ bd
traktowa caly OBRAZEK jako lini pojedyncz. Moesz wic by
zmuszonym do uywania wielu linii form, aby zaimplementowa
pojedynczy format zapisu, podobnie jak kompilator format.
Uwaaj, jeli wstawiasz wokol obrazka podwojne cudzyslowy--znak
"@" moe by wzity za pocztek nazwy tablicy. formline() zawsze
zwraca TRUE. Zobacz stron perlform(1) dla dalszych przykladow.
getc UCHWYTPLIKU
getc Zwraca nastpny znak z pliku wejciowego, identyfikowanego przez
UCHWYTPLIKU. Na kocu pliku zwraca lacuch null. Jeli UCHWYTPLIKU
zostanie pominity, odczyt nastpuje ze STDIN. Nie jest to
efektywne. Nie moe by uywane do pobierania niebuforowanych
pojedynczych znakow. Do tego celu sprobuj 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";
Okrelenie, czy $BSD_STYLE powinno by ustawione, pozostawiamy
jako wiczenie dla czytelnika.
Na systemach, kompatybilnych z POSIX, bardziej przenona do
tego celu moe by funkcja POSIX::getattr(). Zobacz te modul
Term::ReadKey z najbliszego mirrora CPAN; szczegoly o CPAN mona
znale we wpisie CPAN ze strony podrcznika perlmod(1).
getlogin
Zwraca biecy login z /etc/utmp. (o ile istnieje.) W wypadku
nulla, uyj getpwuid().
$login = getlogin || getpwuid($<) || "Kilroy";
Nie wykorzystuj getlogin() do autentykacji: nie jest tak
bezpieczny jak getpwuid().
getpeername GNIZADO
Zwraca spakowany adres sockaddr drugiego koca z polczenia na
GNIEDZIE.
use Socket;
$hersockaddr = getpeername(SOCK);
($port, $iaddr) = unpack_sockaddr_in($hersockaddr);
$herhostname = gethostbyaddr($iaddr, AF_INET);
$herstraddr = inet_ntoa($iaddr);
getpgrp PID
Zwraca biec grup procesu dla podanego PIDa. Aby uzyska grup
biecego procesu, uyj wartoci PID rownej zero. Uycie tej
funkcji na maszynie, nie implementujcej getpgrp(2) podniesie
wyjtek. Jeli parametr PID zostanie pominity, to zwracana jest
grupa biecego procesu. Zauwa, e wersja POSIX getpgrp nie
przyjmuje argumentu PID, wic naprawd przenona jest tylko
konstrukcja PID==0.
getppid Zwraca identyfikator procesu rodzicielskiego.
getpriority CZYJE,KTO
Zwraca biecy priorytet procesu, grupy procesow, lub uytkownika.
(Zobacz stron podrcznika getpriority(2).) Uycie tej funkcji na
maszynie nie implementujcej getpriority(2) podniesie wyjtek
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 kontekcie listowym, wartoci zwracane
ronych funkcji `get' s nastpujce:
($nazwa,$haslo,$uid,$gid,
$quota,$komentarz,$gcos,$katalog,$shell) = getpw*
($nazwa,$haslo,$gid,$czlonkowie) = getgr*
($nazwa,$aliasy,$typadresu,$dlugo,@addrs) = gethost*
($nazwa,$aliasy,$typadresu,$sie) = getnet*
($nazwa,$aliasy,$protokol) = getproto*
($nazwa,$aliasy,$port,$protokol) = getserv*
(Jeli wpis nie istnieje, dostaniesz list null.)
W kontekcie skalarnym, dostajesz nazw. Wyjtkiem jest funkcja
podgldania wedlug nazwy, gdzie dostajesz inn rzecz, jak by ona
nie byla. (Jeli wpis nie istnieje, otrzymujesz warto
niezdefiniowan.) Na przyklad:
$uid = getpwnam
$nazwa = getpwuid
$nazwa = getpwent
$gid = getgrnam
$nazwa = getgrgid
$nazwa = getgrent
itd.
Warto $czlonkowie, zwracana przez getgr*() to oddzielona
spacjami lista nazw loginowych czlonkow grupy.
Jeli w C obslugiwana jest zmienna errno, to dla funkcji
gethost*() jego warto bdzie przekazywana przez $?. Warto
@addrs, zwracana przez wykonane wywolanie, jest list czystych
(raw) adresow, zwroconych przez odpowiednie wywolanie
systemowe. W domenie internetowej, kady adres jest
czterobajtowy, a rozpakowa go moesz, mowic co w rodzaju:
($a,$b,$c,$d) = unpack('C4',$addr[0]);
getsockname GNIAZDO
Zwraca spakowany adres sockaddr tego koca polczenia na
GNIEDZIE.
use Socket;
$mysockaddr = getsockname(SOCK);
($port, $myaddr) = unpack_sockaddr_in($mysockaddr);
getsockopt GNIAZDO,POZIOM,NAZWAOPCJI
Zwraca zadan opcj gniazda, lub warto niezdefiniowan w wypadku
bldu.
glob WYRA
glob Zwraca warto WYRA z rozwiniciami nazwy plikow, takimi jakich
dokonalaby powloka. Funkcja ta jest wewntrzn funkcj
implementujc operator <*.c>, lecz moesz jej uy bezporednio.
Jeli pominite zostanie WYRA, to uywane bdzie $_. Operator
<*.c> jest omowiony bliej w sekcji I/O Operators na stronie
perlop(1).
gmtime WYRA
Konwertuje czas zwrocony przez funkcj time do 9 elementowej
tablicy, w ktorej znajduje si czas zlokalizowany do
standardowej strefy Greenwich. Zazwyczaj jest to uywane
nastpujco:
# 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. Ogolnie znaczy to, e $mon ma zakres 0..11, a
$wday 0..6, z niedziel kryjc si pod 0. Dodatkowo, $year jest
liczb lat od 1900, a nie po prostu dwiema ostatnimi cyframi
roku.
Jeli WYRA jest pominite, wykonuje gmtime(time()).
W kontekcie skalarnym, zwraca warto ctime(3):
$now_string = gmtime; # np. "Thu Oct 13 04:54:34 1994"
Zobacz te funkcj timegm(), udostpnian przez modul Time::Local,
a take funkcj strftime(3), dostpn przez modul POSIX.
goto ETYKIETA
goto WYRA
goto &NAZWA
Posta goto-ETYKIETA szuka instrukcji, oznaczonej przez ETYKIETA
i kontynuuje dzialanie od tamtego miejsca. Nie moe by uywane do
przechodzenia do konstrukcji, wymagajcej inicjalizacji, takiej
jak podprocedura czy ptla foreach. Nie moe te by uywane do
przechodzenia do konstrukcji optymalizowanej, lub do
wychodzenia z bloku, lub podprocedury, przekazanej do sort().
Mona nim natomiast przeskoczy prawie we wszystkie inne miejsca
zakresu dynamicznego, wlczajc wychodzenie z podprocedur, cho w
tym wypadku lepiej uy innej konstrukcji, takiej jak last lub
die. Autor perla nigdy nie czul potrzeby uywania tej postaci
goto (tzn. w perlu--C jest inn spraw).
Posta goto-WYRA oczekuje nazwy etykiety, ktorej zakres moe by
rozwizany dynamicznie. Pozwala to na obliczane goto per
FORTRAN, lecz nie jest zbyt zalecane, jeli optymalizujesz ze
wzgldu na latwo konserwacji programu:
goto ("FOO", "BAR", "GLARCH")[$i];
Posta goto-&NAZWA jest bardzo magiczna i podmienia wywolanie do
nazwanej podprocedury dla biecej procedury. Jest to uywane
przez podprocedury AUTOLOAD, ktore chc ladowa inne
podprocedury, a potem udawa, e ta inna podprocedura zostala
wywolana jako pierwsza (poza tym, wszelkie zmiany @_ biecej
podprocedury s przekazywane innej podprocedurze.) Po tym goto,
nawet caller() nie bdzie w stanie powiedzie, e ta procedura
byla wywolana pierwsza.
grep BLOK LISTA
grep WYRA,LISTA
Jest to podobne duchowo, lecz nie identyczne do grep(1) i
krewnych. W rzeczywistoci, nie jest ograniczone do uywania
wyrae regularnych.
Wykonuje BLOK lub WYRA dla kadego elementu LISTY (ustawiajc
lokalnie $_ na kady element) i zwracajc list wartoci,
skladajcych si z tych, dla ktorych wykonane wyraenie bylo
prawdziwe. W kontekcie skalarnym, zwraca liczb prawdziwych
wyrae.
@foo = grep(!/^#/, @bar); # Pozbd si komentarzy
lub rownowanie,
@foo = grep {!/^#/} @bar; # pozbd si komentarzy
Zauwa, e skoro $_ jest referencj do wartoci listy, moe by
uywane do modyfikowania elementow tablicy. Podczas gdy jest to
przydatne i obslugiwane, moe to spowodowa te nieoczekiwane
rezultaty, szczegolnie w wypadku gdy LISTA nie jest nazwan
tablic.
Grep zwraca aliasy do oryginalnej listy. Znaczy to, e
modyfikowanie elementu listy zwroconej przez to polecenie,
modyfikuje te element listy oryginalnej.
hex WYRA
hex Interpretuje WYRA jako lacuch szesnastkowy i zwraca odpowiadajc
mu warto. (Dla konwersji lacuchow, ktore mog si zaczyna od 0,
lub 0x, zobacz opis oct, znajdujcy si gdzie w tym dokumencie.)
Jeli WYRA zostanie pominite, to uywane 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 moduly, ktore
ycz sobie eksportowa nazwy do kolejnych modulow. [potem]
funkcja use() wola metod import() dla uywanego 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 lacuchu STR.
Jeli POZYCJA jest pominita, to przeszukiwanie rozpoczyna si od
pocztku lacucha. Warto zwracana jest oparta o 0 (lub tego, na
co ustawisz zmienn $[ --lecz lepiej tego nie rob). Jeli podcig
nie moe zosta zlokalizowany, zwracana jest podstawa - 1, czyli
normalnie -1.
int WYRA
int Zwraca cz calkowit z WYRA. Jeli WYRA jest pominite, uywane jest
$_.
ioctl UCHWYTPLIKU,FUNKCJA,SKALAR
Implementuje funkcj ioctl(2). Przypuszczalnie aby jej uywa,
bdziesz musial powiedzie
require "ioctl.ph"; # przypuszczalnie w /usr/local/lib/perl/ioctl.ph
Jeli ioctl.ph nie istnieje, lub nie ma wlaciwych definicji,
bdziesz musial uy swojej wlasnej, opartej na naglowkach C,
takich jak <sys/ioctl.h>. (Istnieje skrypt perla o nazwie
h2ph(1), ktora pomaga w konwersji, lecz jest to nietrywialna
sprawa.) SKALAR jest wartoci zapisywan, lub odczytywan, zalenie
od FUNKCJI--wskanik do wartoci lacuchowej SKALARA bdzie
przekazany jako trzeci argument wlaciwego wywolania ioctl.
(Jeli SKALAR nie ma wartoci lacuchowej, lecz ma numeryczn, to
zostanie przekazana ta warto zamiast wskanika do lacucha. Aby
zapewni, e bdzie to prawdziwe, przed uyciem dodaj do skalara
0). Do manipulowania na wartociach struktur, uywanych przez
ioctl() przydatne s funkcje pack() i unpack(). Nastpujcy
przyklad 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 nastpujca:
gdy OS zwraca: to Perl zwraca:
-1 warto niezdefiniowan
0 lacuch "0 but true"
co innego to samo
Tak wic, mimo e perl zwraca po sukcesie TRUE, a w wypadku
niepowodzenia FALSE, moesz latwo okreli rzeczywist warto
zwrocon przez system operacyjny:
($retval = ioctl(...)) || ($retval = -1);
printf "System zwrocil %d\n", $retval;
join WYRA,LISTA
Lczy osobne lacuchy LISTY w pojedynczy lacuch, w ktorym pola s
rozdzielone wartociami WYRA. Zwraca ten lacuch. Przyklad:
$_ = join(':', $login,$passwd,$uid,$gid,$gcos,$home,$shell);
Zobacz te opis split.
keys HASH
Zwraca normalna tablic, skladajc si z wszystkich kluczy
nazwanej tablicy asocjacyjnej. (W kontekcie skalarnym, zwraca
liczb kluczy.) Klucze s zwracane w do losowej kolejnoci, lecz w
tej samej, w ktorej swoje wartoci produkuj funkcje values() i
each() (o ile tablica asocjacyjna nie byla [w midzyczasie]
zmieniana). W efekcie ubocznym, funkcja resetuje iterator
tablicy.
A oto jeszcze inny sposob na wydrukowanie rodowiska:
@keys = keys %ENV;
@values = values %ENV;
while ($#keys >= 0) {
print pop(@keys), '=', pop(@values), "\n";
}
a co, jeli by je posortowa wedlug klucza:
foreach $key (sort(keys %ENV)) {
print $key, '=', $ENV{$key}, "\n";
}
Aby posortowa tablic wedlug wartoci, bdziesz musial uy funkcji
sort. Oto numeryczne posortowanie tablicy asocjacyjnej wedlug
jej wartoci:
foreach $key (sort { $hash{$b} <=> $hash{$a} } keys %hash)) {
printf "%4d %s\n", $hash{$key}, $key;
}
Jako lwarto, keys umoliwia zwikszanie liczby komorek
asocjacyjnych, zaalokowanych dla danej tablicy asocjacyjnej.
Moesz zyska na efektywnoci, jeli tablica ma by dua. (Jest to
podobne do pre-rozszerzania tablicy przez przeznaczanie $#array
wikszego numeru.) Jeli powiesz
keys %hash = 200;
to %hash bdzie mial co najmniej 200 zaalokowanych komorek.
Komorki te bd utrzymywane nawet, jeli zrobisz %hash = (). Jeli
chcesz zwolni zasob wewntrz zakresu, uyj undef %hash.
Korzystajc z powyszej wlaciwoci, zawsze mona zmniejszy liczb
zaalokowanych komorek.
kill LISTA
Wysyla sygnal do listy procesow. Pierwszy element listy musi by
nazw sygnalu. Zwraca liczb procesow, do ktorych udalo si
przesla sygnal.
$cnt = kill 1, $child1, $child2;
kill 9, @goners;
W przeciwiestwie do zachowania w powloce, w perlu jeli -1SYGNA/L
jest ujemny, to killuje grupy procesow, zamiast procesow. (W
Systemie V, ujemny numer PROCESU odnosi si te do grup procesow,
lecz nie jest to przenone.) Oznacza to, e zazwyczaj chcesz
przekazywa sygnaly dodatnie. Moesz te uywa nazw sygnalow w
cudzyslowach. Zobacz jeszcze sekcj Signals w podrczniku
perlipc(1).
last ETYKIETA
last Komenda last jest podobna do instrukcji break z C (uywanej w
ptlach); przerywa natychmiastowo ptl. Jeli pominity jest
parametr ETYKIETY, to komenda odnosi si do najbardziej
wewntrznej ptli zamykajcej. Potencjalna instrukcja bloku
continue nie jest wykonywana:
LINE: while (<STDIN>) {
last LINE if /^$/; # zakocz po skoczeniu z naglowkiem
...
}
lc WYRA
lc Zwraca WYRA w malych literach. Jest to wewntrzna funkcja,
implementujca escape \L w lacuchach ujtych w cudzyslowy. Jeli
wlczone jest use locale, to szanuje biece locale LC_CTYPE.
Zobacz stron podrcznika perllocale(1).
Jeli WYRA jest pominite, uywane jest $_.
lcfirst WYRA
lcfirst Zwraca warto WYRA, w ktorym pierwszy znak jest zastpiony mal
liter. Jest to funkcja wewntrzna, implementujca escape \l w
lacuchach ujtych w podwojne cudzyslowy. Jeli wlczone jest use
locale, to szanuje biece locale LC_CTYPE. Zobacz stron
podrcznika perllocale(1).
Jeli WYRA jest pominite, uywane jest $_.
length WYRA
length Zwraca dlugo w znakach wartoci WYRA. Jeli WYRA jest pominite,
zwracana jest dlugo $_.
link STARYPLIK,NOWYPLIK
Tworzy now nazw pliku, dowizan do starej nazwy pliku. Po
sukcesie zwraca 1, a w przeciwnym wypadku 0.
listen GNIAZDO,ROZMIARKOLEJKI
Robi to samo, co wywolanie systemowe listen(2). Zwraca TRUE po
sukcesie, a w przeciwnym wypadku FALSE. Zobacz przyklad w
sekcji Sockets: Client/Server Communication w podrczniku
perlipc(1).
local WYRA
Local modyfikuje wymienione zmienne tak, e s lokalne w
otaczajcym je bloku, podprocedurze, eval{}, lub do. Jeli
wymieniona jest wicej ni jedna warto, to lista musi by
umieszczona w nawiasach. Zobacz sekcj Temporary Values via
local() w podrczniku perlsub(1).
Zamiast local(), czsto raczej wolalby uy my(), gdy to pierwsze
tak naprawd nie jest tym czym si wikszoci ludzi wydaje.
Odsylam do sekcji Private Variables via my() w podrczniku
perlsub(1).
localtime WYRA
Konwertuje czas, zwrocony przez funkcj time na 9-elementow
tablic, ktorej czas jest zanalizowany dla lokalnej strefy
czasowej. Zazwyczaj jest to uywane nastpujco:
# 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 rzeczywistoci znaczy to, e $mon ma zasig
0..11, a $wday 0..6, gdzie 0 oznacza niedziel. Poza tym, $year
jest liczb lat ot 1900 roku, tj. rok 123 oznacza 2023.
Jeli WYRA zostanie pominite, to uywany jest czas biecy
(localtime(time)).
W kontekcie skalarnym, zwraca warto ctime(3):
$now_string = localtime; # np., "Thu Oct 13 04:54:34 1994"
Zobacz te modul Time::Local i funkcje strftime(3) i mktime(3),
dostpne przez modul POSIX.
log WYRA
log Zwraca logarytm (podstawa e) z WYRA. Jeli WYRA jest pominite,
zwraca warto dla $_.
lstat UCHWYTPLIKU
lstat WYRA
lstat Robi to samo, co funkcja stat(), lecz zamiast plikow, na ktore
wskazuj dowizania symboliczne, testuje same dowizania. Jeli
twoj system nie obsluguje dowiza symbolicznych, dokonywany jest
zwykly stat().
Jeli WYRA jest pominite, uywane jest $_.
m// Operator porownania. Zobacz stron perlop(1).
map BLOK LISTA
map WYRA,LISTA
Analizuje BLOK lub WYRA dla kadego elementu LISTY (ustawiajc
lokalnie $_ na kady element) i zwraca warto listow, zloon z
wynikow kadego analizowania. BLOK lub WYRA jest analizowany w
kontekcie listowym, wic kady element LISTY moe da zero, jeden,
lub wicej elementow w wartoci zwracanej.
@chars = map(chr, @nums);
tlumaczy list liczb na odpowiadajce 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, ktorego prawa s
okrelone przez PRAWA (zmodyfikowane przez umask). Jeli operacja
zakoczy si sukcesem, zwraca 1, w przeciwnym wypadku zwraca 0 i
ustawia $! (errno).
msgctl ID,CMD,ARG
Wola funkcj IPC msgctl(2) z Systemu V. Jeli CMd jest &IPC_STAT,
to ARG musi by zmienn, ktora bdzie przechowywa zwrocon struktur
msquid_ds. Warto zwracana tej funkcji jest podobna do ioctl:
dla bldu warto niezdefiniowana, "0 but true" dla zera, oraz
rzeczywista warto zwracana dla innych wypadkow.
msgget KLUCZ,FLAGI
Wola funkcj IPC msgget(2) z Systemu V. Zwraca identyfikator
kolejki komunikatow, lub warto niezdefiniowan (w wypadku bldu).
msgsnd ID,MSG,FLAGI
Wola funkcj IPC msgsnd(2) z Systemu V, ktora przesyla komunikat
MSG do kolejki komunikatow ID. MSG musi zaczyna si wartoci long
int, okrelajc typ, ktor mona utworzy z pomoc pack("l",$typ).
Zwraca TRUE po sukcesie i FALSE w wypadku bldu.
msgrcv ID,VAR,ROZMIAR,TYP,FLAGI
Wola funkcj IPC msgrcv(2) z Systemu V. Funkcja odbiera
komunikat z kolejki komunikatow ID i zapisuje go do zmiennej
VAR. Maksymalna odbierana wiadomo ma wielko ROZMIAR. Zauwa, e
gdy wiadomo jest odbierana, to jej typ bdzie pierwsz rzecz,
ldujc w VAR, a maksymalna dlugo VAR to ROZMIAR plus rozmiar
typu komunikatu. Zwraca TRUE po sukcesie, a FALSE w wypadku
bldu. [przyp.tlum.: pole TYPE generalnie w IPC oznacza typ,
zdefiniowany w pierwszych 4 bajtach komunikatu]
my WYRA Instrukcja "my" deklaruje wymienione zmienne jako lokalne dla
zamknitego bloku, podprocedury, eval lub pliku potraktowanego
instrukcjami do/require/use. Jeli wymieniono wicej ni jedn
warto, lista musi by ujta w nawiasy. Zobacz jeszcze sekcj
Private Variables via my() w podrczniku perlsub(1).
next ETYKIETA
next Komenda next jest podobna do instrukcji continue w C;
rozpoczyna kolejn iteracj ptli:
LINE: while (<STDIN>) {
next LINE if /^#/; # pozbd si komentarzy
...
}
Zauwa, e jeli powyej byl blok continue, to zostalby on wykonany
nawet na usunitych liniach. Jeli argument ETYKIETY jest
pominity, komenda odnosi si do najbardziej wewntrznej
otaczajcej ptli.
no Module LISTA
Zobacz funkcj "use", gdzie "no" jest przeciwiestwem.
oct WYRA
oct Interpretuje WYRA jako lacuch osemkowy i zwraca odpowiadajc
warto. (Jeli WYRA zaczyna si od 0x, jest interpretowane jako
lacuch szesnastkowy.) Nastpujcy kod obsluguje liczby dziesitne,
osemkowe i szesnastkowe w standardowej notacji perla lub C:
$val = oct($val) if $val =~ /^0/;
Jeli WYRA jest pominite, uywa $_. Funkcja ta jest czsto uywana
gdy lacuch w rodzaju "644" musi by np. przekonwertowany na
prawa pliku. (Chocia perl automatycznie konwertuje lacuchy na
liczby, zgodnie z potrzebami, to automatyczna konwersja zaklada
podstaw 10.)
open UCHWYTPLIKU,WYRA
open UCHWYTPLIKU
Otwiera plik, ktorego nazwa jest przekazywana WYRA, a nastpnie
wie go z UCHWYTEMPLIKU. Jeli UCHWYTPLIKU jest wyraeniem, to
jego warto jest uywana jako nazwa rzeczywistego uchwytu pliku.
Jeli WYRA jest pominite, 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 bd w ten
sposob dzialaly.)
Jeli nazwa pliku rozpoczyna si od '<' lub od niczego, plik jest
otwierany dla wejcia (odczytu). Jeli nazwa pliku rozpoczyna si
od '>', plik jest kasowany i otwierany dla zapisu. Jeli nazwa
pliku rozpoczyna si od '>>', plik jest otwierany dla
dopisywania. Jeli przed '>' lub '<' postawisz '+', oznacza to,
e chcesz zarowno czyta, jak i zapisywa do pliku. Tryb '+<' jest
zazwyczaj preferowany dla poprawek odczytu/zapisu--tryb '+>'
najpierw pobilby plik. Przedrostek i nazwa pliku mog by
oddzielone spacjami. Wszystkie te przedrostki odpowiadaj trybom
otwarcia funkcji fopen(3).
Jeli nazwa pliku rozpoczyna si od "|", to plik jest rozumiany
jako komenda, do ktorej potokiem przesylane jest wyjcie.
Odwrotnie, jeli nazwa pliku koczy si tym symbolem, to nazwa
pliku jest interpretowana jako komenda, ktorej wyjcie jest
przesylane potokiem na nasze wejcie (Zobacz sekcj Using open()
for IPC w podrczniku perlipc(1)). (Moesz nie mie czystego
open(), powodujcego, e komenda jest zarowno potokiem wejciowym,
jak i wyjciowym. S jednak na to rady, zobacz stron podrcznika
IPC::Open2, IPC::Open3, oraz sekcj Bidirectional Communication
w podrczniku perlipc(1).)
Otwieranie '-' otwiera strumie STDIN, a otwieranie '>-' otwiera
STDOUT. Open po sukcesie zwraca zero, a w przeciwnym wypadku
warto niezdefiniowan. Jeli open otworzyl potok, warto zwracana
jest identyfikatorem podprocesu (pid).
Jeli masz na tyle pecha, e pracujesz z perlem na systemie,
ktory odronia pliki tekstowe i binarne (nowoczesne systemy ich
nie rozroniaj), to powiniene poczyta o funkcji binmode,
opisanej gdzie w tym dokumencie. Systemy, wymagajce binmode
rozpoznaje si po ich formacie pliku tekstowego. Systemy takie,
jak Unix i Plan9, ktore oddzielaj linie pojedynczym znakiem i
ktore koduj go w C jako "\n", nie potrzebuj binmode. Reszta
tak.
Przyklady:
$ARTICLE = 100;
open ARTICLE or die "Nie mog znale artykulu $ARTICLE: $!\n";
while (<ARTICLE>) {...
open(LOG, '>>/usr/spool/news/twitlog'); # (log jest zarezerwowany)
open(DBASE, '+<dbase.mine'); # otworz dla odnowienia
open(ARTICLE, "caesar <$article |"); # dekoduj artykul
open(EXTRACT, "|sort >/tmp/Tmp$$"); # $$ jest pidem naszego procesu
# przetworz list argumentow plikow, wraz z wszelkimi zalcznikami
foreach $file (@ARGV) {
process($file, 'fh00');
}
sub process {
local($filename, $input) = @_;
$input++; # jest to inkrementacja lacuchowa
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
}
}
Moesz rownie, zgodnie z tradycj powloki Bourne, poda WYRA,
zaczynajcy si od ">&", co oznacza, e reszta lacucha jest
interpretowana jako nazwa uchwytu pliku (lub numerycznego
deskryptora pliku), ktory naley zduplikowa i otworzy. & mona uy
po >, >>, <, +>, +>>, i +<. Tryb, ktory podasz, powinien
odpowiada trybowi oryginalnego uchwytu pliku. (Duplikowanie
uchwytow pliku nie pobiera na konto adnych istniejcych
zawartoci buforow stdio.) Oto skrypt, ktory zachowuje,
przekierowuje i odwiea 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; # zrob niebuforowane
select(STDOUT); $| = 1; # j/w
print STDOUT "stdout 1\n"; # dziala to te dla
print STDERR "stderr 1\n"; # podprocesow
close(STDOUT);
close(STDERR);
open(STDOUT, ">&SAVEOUT");
open(STDERR, ">&SAVEERR");
print STDOUT "stdout 2\n";
print STDERR "stderr 2\n";
Moesz poda "<&=N", gdzie N jest liczb. Perl wtedy dokona
operacji rownowanej fdopen(3) z C. Na przyklad:
open(FILEHANDLE, "<&=$fd")
Jeli otwierasz potok do komendy "-", np. albo "|-" albo "-|",
to dokonywany jest niejawny fork, a zwrocona warto open jest
wewntrz procesu rodzicielskiego pidem potomka, a w wtku potomka
zerem. (Aby okreli, czy open byl pomylny, uyj defined($pid).)
Uchwyt pliku u rodzica zachowuje si normalnie, lecz i/o dla
tego uchwytu jest przesylane 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 uywane jak
normalny potokowy open, lecz daje lepsz kontrol nad
wywolywaniem komendy potoku, np. gdy pracujesz w suid i nie
chcesz by zmuszonym do skanowania komend powloki w poszukiwaniu
metaznakow. Nastpujce pary s mniej lub bardziej rownowane:
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 szczegolow, zobacz sekcj Safe Pipe Opens w podrczniku
perlipc(1).
UWAGA: Przy kadej operacji, dokonujcej forkowania, nieopronione
bufory pozostaj takie w obydwu procesach, co znaczy, e lepiej
ustawi $|, aby zapobiec duplikowaniu wyjcia.
Zamykanie potokowego uchwytu pliku powoduje, e proces
rodzicielski czeka, a dziecko zakoczy i zwraca warto statusu w
$?.
Jeli uywasz konstruktora z pakietu IO::Handle (lub z jego
podklas, takich jak IO::File czy IO::Socket), moesz generowa
anonimowe uchwyty plikow, ktore maj zakres dowolnych zmiennych,
ktore utrzymuj do nich referencje. Zamykaj si one automatycznie
po wyjciu 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 zamknicie tutaj.
mung $first or die "mung failed"; # Lub tutaj.
return $first, <$handle> if $ALL; # Lub tutaj.
$first; # Lub tutaj.
}
Nazwa pliku, ktora jest przekazana open, przechodzi operacj
usuwania prowadzcych i koczcych bialych spacji. Aby otworzy
plik, posiadajcy te dziwne znaki, trzeba je chroni:
$file =~ s#^(\s)#./$1#;
open(FOO, "< $file\0");
Jeli chcesz uy prawdziwego, znanego z C open() (zobacz stron
open(2)), to powiniene uy funkcji sysopen(). Jest to inny
sposob chronienia nazw plikow 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(), znajdujcy si gdzie indziej w tym
dokumencie.
opendir UCHWYTKATALOGU,WYRA
Otwiera katalog o nazwie WYRA. Otwarty uchwyt mona przetwarza
funkcjami readdir(), telldir(), seekdir(), rewinddir(), i
closedir(). Po sukcesie zwraca TRUE. Uchwyty katalogow maj
swoj wlasn przestrze nazw. Jest ona oddzielna od uchwytow
plikow.
ord WYRA
ord Zwraca numeryczn warto ascii pierwszego znaku WYRA. Jeli WYRA
zostalo pominite, uywane jest $_. Dla operacji odwrotnej,
zobacz opis chr, znajdujcy si gdzie w tym dokumencie.
pack WZORZEC,LISTA
Pobiera tablic lub list wartoci i pakuje j w struktur binarn,
zwracajc lacuch, zawierajcy t struktur. WZORZEC jest sekwencj
znakow, ktore pokazuj kolejno i typy wartoci. S one nastpujce:
A Lacuch ascii, dopelniany spacjami.
a Lacuch ascii, dopelniany przez null.
b Lacuch bitowy (wznoszca kolejno bitow, jak w vec()).
B Lacuch bitowy (malejca kolejno bitow).
h Lacuch szesnastkowy (najpierw niski nibble).
H Lacuch 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 _dokladnie_ 16 bitowy, co moe si roni 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. Dokladny rozmiar zaley
od tego, co lokalny kompilator C uwaa za 'int' i moe by nawet
wiksze ni 'long', opisywany dalej.)
l Warto long ze znakiem.
L Warto long bez znaku.
(Ta warto 'long' jest _dokladnie_ 32 bitowa, co moe si
roni od tego, co lokalny kompilator C uwaa za 'long'.)
n Short w porzdku sieciowym (big-endian).
N Long w porzdku sieciowym (big-endian).
v Short w porzdku "VAX" (little-endian).
V Long w porzdku "VAX" (little-endian).
(Te 'short' i 'long' s _dokladnie_ 16 i
32 bitowe (odpowiednio).)
f Float pojedynczej precyzji w formacie macierzystym.
d Float podwojnej precyzji w formacie macierzystym.
p Wskanik do lacucha zakoczonego zerem.
P Wskanik do struktury (lacuch o ustalonej dlugoci).
u Uuencodowany lacuch.
w Skompresowany integer BER. Jego bajty reprezentuj calkowity
integer o podstawie 128, najpierw bardziej znaczce cyfry,
z tak mal iloci cyfr, jak tylko si da. Osmy bit jest ustawiany
na kadym bajcie, poza ostatnim.
x Bajt null.
X Wstecz o bajt (?) (Back up a byte).
@ Wypelnienie null do bezwzgldnej pozycji (?)
(Null fill to absolute position).
Po kadej literze moe opcjonalnie nastpowa liczba, ktora podaje
licznik powtorze. Dla wszystkich typow, poza "a", "A", "b",
"B", "h", "H", i "P", funkcja pack pore tyle samo wartoci z
LISTY. Gwiazdka (*) dla licznika powtorze, oznacza uycie
wszystkich elementow, ktore pozostaly. Typy "a" i "A" pobieraj
tylko jedn warto, lecz pakuj j jako lacuch o podanej dlugoci,
wypelniajc j w razie potrzeby zerami, lub spacjami. (Podczas
rozpakowywania, "A" zdejmuje koczce spacje i zera, lecz "a"
tego nie robi.) Podobnie, pola "b" i "B" pakuj lacuchy, ktore
s dlugoci tylu bitow. "h" i "H" pakuj lacuchy, ktore s dlugoci
tylu nibblow. "P" pakuje wskanik do struktury, ktorej rozmiar
jest wskazywany przez dlugo. Liczby rzeczywiste (float, double)
s tylko w formacie macierzystym maszyny; z powodu wieloci
formatow 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 jeli obydwie uywaj arytmetyki zmiennoprzecinkowej IEEE
(gdy endainowo pamici nie jest czci specyfikacji IEEE). Zauwa,
e perl uywa wewntrznie 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 bdzie w ogolnym przypadku si rowna $foo).
Przyklady:
$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 moe by ogolnie uywany te w funkcji unpack.
package PRZESTRZENAZW
Deklaruje jednostk kompilacji, przynalec do danej przestrzeni
nazw. Zakres deklaracji pakietu ley od deklaracji, do koca
otaczajcego bloku (tak samo, jak zakres operatora local()).
Wszelkie dalsze niekwalifikowane identyfikatory dynamiczne bd
wewntrz tej przestrzeni nazw. Instrukcja package dotyczy tylko
zmiennych dynamicznych--wlczajc w to te, ktorych uyle lokalnie
(local()),--lecz nie zmienne leksykalne, utworzone przez my().
Zazwyczaj jest to pierwsza deklaracja we wlczanym przez require
lub use pliku. Moesz przelczy si do pakietu w wicej ni jednym
miejscu; ma to wplyw jedynie na to, ktorej tablicy symboli uywa
kompilator dla reszty bloku. Do zmiennych i uchwytow plikow z
innych pakietow, moesz odnosi si, poprzedzajc identyfikatory
nazwami pakietow, za ktorymi nastpuj dwa dwukropki:
$Pakiet::Zmienna. Jeli nazwa pakietu jest zerowa, uywany jest
pakiet main. Tak wic $::sail jest rownowane $main::sail.
Zobacz sekcj Packages w podrczniku perlmod(1). Zobacz te
podrcznik perlsub(1), gdzie opisane s problemy zakresow.
pipe UCHWYTODCZYTU,UCHWYTZAPISU
Otwiera par polczonych potokow, zupelnie jak wywolanie
systemowe pipe(2). Zauwa, e jeli zestawiasz ptle potokowych
procesow, to o ile nie zachowasz ostronoci, moe pojawi si
deadlock. Dodatkowo, zauwa, e potoki perla uywaj buforowania
stdio, wic moesz by zmuszonym ustawi $|, aby oproni swoj
UCHWYTZAPISU po kadej z komend, zalenie od aplikacji.
Obejrzyj jeszcze stron IPC::Open2, IPC::Open3 oraz sekcj
Bidirectional Communication z podrcznika perlipc(1). S tam
przyklady takich rzeczy.
pop TABLICA
pop Pobiera i zwraca ostatni warto tablicy, skracajc j o jeden. Ma
podobne dzialanie do
$tmp = $ARRAY[$#ARRAY--];
Jeli tablica nie ma elementow, zwracana jest warto
niezdefiniowana. Jeli parametr TABLICA zostanie pominity, to
pobiera z tablicy @ARGV w programie glownym, oraz z @_ w
podprocedurach, podobnie jak shift().
pos SKALAR
pos Zwraca offset, gdzie dla zmiennej SKALAR zakoczylo si ostatnie
przeszukiwanie m//g. (Jeli nie podano zmiennej, uywany jest
$_). Mona go modyfikowa w celu zmieniania offsetu. Modyfikacja
ta wplynie rownie na zapewnienia zerowej szerokoci \G w
wyraeniach regularnych. Zobacz podrczniki perlref(1) i
perlop(1).
print UCHWYTPLIKU LISTA
print LISTA
print Drukuje oddzielon przecinkami list lacuchow. Po sukcesie zwraca
TRUE. UCHWYTPLIKU moe by nazw zmiennej skalarnej, w ktorym
wypadku zmienna ta przechowuje nazw lub referencj do uchwytu
pliku, wprowadzajc tak poziom niebezporednioci. (UWAGA: Jeli
UCHYTPLIKU jest zmienn, a nastpny token jest [term], to moe to
by le zinterpretowane jako operator, chyba e wstawisz +, lub
ujmiesz argumenty w nawiasy.) Jeli UCHWYTPLIKU jest pominity,
drukowanie nastpuje na standardowe wyjcie (lub do ostatnio
wybranego kanalu wyjciowego--zobacz opis select, znajdujcy si
gdzie w tym dokumencie ). Jeli pominito rownie argument LISTY,
na STDOUT drukowane jest $_. Aby ustawi kanal wyjciowy na co
innego ni STDOUT, uyj operacji select. Zauwa, e z uwagi na to,
e print pobiera LIST, wszystko z LISTY jest analizowane w
kontekcie listowym, a wszelka podprocedura, ktor wywolasz,
bdzie miala jedno, lub wicej wyrae analizowanych w kontekcie
listowym. Uwaaj te, by nie wpisywa z slowem kluczowym print
lewego nawiasu, chyba e chcesz by odpowiadajcy prawy nawias
koczyl argumenty do drukowania--wstaw +, lub otocz wszystkie
argumenty nawiasami.
Zauwa, e jeli przechowujesz UCHWYTYPLIKOW w tablicy, lub innym
wyraeniu, bdziesz musial uywa bloku, zwracajcego jego warto:
print { $files[$i] } "stuff\n";
print { $OK ? STDOUT : STDERR } "stuff\n";
printf UCHWYTPLIKU FORMAT, LISTA
printf FORMAT, LISTA
Rownowane print UCHWYTPLIKU sprintf(FORMAT, LISTA). Pierwszy
argument list bdzie interpretowany jako format printf. Jeli
wlczone jest use locale, to znak uywany dla kropki dziesitnej
jest zaleny od locala LC_NUMERIC. Zobacz stron podrcznika
perllocale(1).
Nie wpadnij w pulapk uywania printf(), gdy wystarczylby zwykly
print(). Funkcja print() jest efektywniejsza i mniej wraliwa na
bldy.
prototype FUNKCJA
Zwraca w postaci lacucha prototyp funkcji (lub undef, jeli
funkcja nie ma prototypu). FUNKCJA jest referencj lub nazw
funkcji, ktorej prototyp usilujemy uzyska.
push TABLICA,LISTA
Traktuje TABLIC jako stos i wrzuca na jej szczyt wartoci LISTY.
Dlugo TABLICY zwiksza si o dlugo LISTY. Ma takie samo dzialanie
jak
for $value (LIST) {
$ARRAY[++$#ARRAY] = $value;
}
lecz jest efektywniejsze. Zwraca now liczb elementow tablicy.
q/LACUCH/
qq/LACUCH/
qx/LACUCH/
qw/LACUCH/
Uogolnione cudzyslowy. Zobacz stron perlop(1).
quotemeta WYRA
quotemeta
Zwraca warto WYRA z poprzedzonymi odwroconymi ukonikami
wszystkimi nie-alfanumerycznymi znakami. (To znaczy, e
wszystkie znaki, nie podpadajce pod /[A-Za-z_0-9]/ zostan
poprzedzone odwrotnym ukonikiem, niezalenie od ustawie locale.)
Jest to wewntrzna funkcja, implementujca escape Q w lacuchach z
podwojnych cudzyslowow.
Jeli WYRA jest pominite, uywane jest $_.
rand WYRA
rand Zwraca losow liczb, wiksz lub rown 0 i mniejsz od wartoci WYRA.
(WYRA powinno by dodatnie.) Jeli WYRA jest pominite, uywana
jest warto 1. Automatycznie wywoluje srand(), chyba e byl on ju
wywolany. Zobacz te opis srand().
(Uwaga: Jeli twoja funkcja rand zwraca stale liczby, ktore s
zbyt wielkie, lub zbyt male, to znaczy, e twoja wersja perla
prawdopodobnie zostala skompilowana ze zl liczb RANDBITS.)
read UCHWYTPLIKU,SKALAR,DLUGO,OFFSET
read UCHWYTPLIKU,SKALAR,DLUGO
Probuje odczyta DLUGO bajtow danych do zmiennej SKALAR z pliku
wskazywanego przez UCHWYTPLIKU. Zwraca liczb odczytanych
bajtow, lub undef w wypadku bldu. SKALAR zostanie rozcignity,
lub skurczony do rzeczywistej dlugoci odczytanych danych. Mona
te poda OFFSET. Wtedy odczyt nastpi w innym miejscu ni pocztek
lacucha. Wywolanie to jest w rzeczywistoci zaimplementowane w
oparciu o wywolanie fread(3) stdio. Aby uzyska prawdziwe
wywolanie systemowe read(2), uyj sysread().
readdir UCHWYTKATALOGU
Zwraca nastpny wpis katalogu, otwartego przez opendir(). Jeli
jest uywane w kontekcie listowym, zwraca reszt wpisow w
katalogu. Jeli nie ma ju wicej wpisow, w kontekcie skalarnym
zwracana jest warto niezdefiniowana, a w kontekcie listowym
list null.
Jeli masz zamiar dokonywa testow plikowych na wartociach
zwracanych przez readdir(), to lepiej poprzed te nazwy
katalogiem. Powinno si tak robi, gdy nie readdir() nie
przechodzi do swojego katalogu i zaszlo by testowanie nie tego
pliku co trzeba.
opendir(DIR, $some_dir) || die "Nie powiodl si opendir $some_dir: $!";
@dots = grep { /^\./ && -f "$some_dir/$_" } readdir(DIR);
closedir DIR;
readlink WYRA
readlink
Zwraca warto dowizania symbolicznego. Dziala to, jeli dowizania
symboliczne s zaimplementowane [w systemie]. W przeciwnym
wypadku powstaje bld krytycznych. W wypadku bldu systemowego,
zwracana jest warto niezdefiniowana i ustawiane jest $!
(errno). Jeli WYRA zostanie pominite, uywane jest $_.
recv GNIAZDO,SKALAR,DLUGO,FLAGI
Odbiera komunikat na gniedzie. Probuje odebra DLUGO bajtow do
zmiennej SKALAR. (GNIAZDO to uchwyt gniazda). W rzeczywistoci
funkcja wykonuje odpowiednik funkcji C recvfrom()(2), wic
zwraca adres nadawcy. W wypadku bldu, zwracana jest warto
niezdefiniowana. SKALAR bdzie rozcigany do dlugoci rzeczywicie
odczytanych danych. Flagi s takie same jak w wywolaniu
systemowym o tej samej nazwie. Zobacz jeszcze sekcj UDP:
Message Passing w podrczniku perlipc(1). S tam przyklady.
redo ETYKIETA
redo Komenda redo restartuje blok ptli, nie analizujc przy tym
warunku. Blok continue (jeli taki istnieje) rownie nie jest
wykonywany. Jeli pominita zostanie ETYKIETA, komenda odnosi si
do najbardziej wewntrznej otaczajcej ptli. Komenda ta jest
zazwyczaj wykorzystywana przez programy, ktore chc si oszukiwa
co do tego, co bylo wlanie pobrane:
# Uproszczony ogolacacz komentarzy Pascala
# (uwaga: zaklada brak { i } w lacuchach)
LINE: while (<STDIN>) {
while (s|({.*}.*){.*}|$1 |) {}
s|{.*}| |;
if (s|{.*| |) {
$front = $_;
while (<STDIN>) {
if (/}/) { # Koniec komentarza?
s|^|$front{|;
redo LINE;
}
}
}
print;
}
ref WYRA
ref Jeli warto WYRA jest referencj, zwracane jest TRUE, a w
przeciwnym wypadku FALSE. Jeli WYRA zostanie pominite, uyte
zostanie $_. Zwracana warto zaley od typu, do ktorego
referencja jest referencj. Wbudowane typy to:
REF
SCALAR
ARRAY
HASH
CODE
GLOB
Jeli referencjowany obiekt zostal blogoslawiony (bless()) do
pakietu, to zwracana jest nazwa pakietu. Moesz myle 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 podrcznika perlref(1).
rename STARANAZWA,NOWANAZWA
Zmienia nazw pliku. Po sukcesie zwraca 1, w przeciwnym wypadku
0. Nie dziala midzy granicami systemow plikow.
require WYRA
require Zadaj pewnej wlaciwoci, podanej przez WYRA, lub $_, jeli go nie
podano. Jeli WYRA jest numeryczne, to wymaga ono by bieca
wersja perla ($] lub $PERL_VERSION) byla wiksza lub rowna WYRA.
W przeciwnym wypadku da wlczenia pliku biblioteki (o ile nie
jest on ju wlczony). Plik jest wlczany z uyciem mechanizmu do-
PLIK, ktory w zasadzie jest wariacj eval(). Semantyka jest
podobna do nastpujcej 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 zwrocilo prawdziwej wartoci" unless $result;
$INC{$filename} = $realfilename;
$result;
}
Zauwa, e plik nie bdzie wlczany pod t sam nazw dwukrotnie. Jako
ostatni instrukcj, plik musi zwraca TRUE, wskazujc tak pomylne
wykonanie kodu inicjalizacji, wic zazwyczaj koczy si takie
pliki "1;", chyba e jeste pewien, e zwroci TRUE tak czy
inaczej. Lepiej jednak wstawi po prostu"1;", na wypadek np.
dodania nowych instrukcji.
Jeli WYRA jest prostym slowem, require zaklada rozszerzenie
".pm" i samodzielnie zamienia "::" na "/", ulatwiajc ladowanie
modulow standardowych. Ta posta ladowania modulow 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 potniejszego narzdzia importu, obejrzyj opis use, znajdujcy
si w tym dokumencie, oraz stron perlmod(1).
reset WYRA
reset Ogolnie, uywane w bloku continue na kocu ptli, w celu
wyczyszczenia zmiennych i resetowania przeszukiwa ??, tak by
znow dzialaly. Wyraenie jest interpretowane jako lista
pojedynczych znakow (dla podawania zakresow, mona uywa
mylnikow). Wszystkie zmienne i tablice, rozpoczynajce si na
jedn z tych liter, s resetowane do stanu pierwotnego. Jeli
wyraenie zostanie pominite, przeszukiwania jednego-trafienia
(?wzorzec?) s resetowane do ponownego trafienia. Resetowanie
tyczy si tylko obiektow biecego pakietu. Zwracane jest zawsze
1. Przyklady:
reset 'X'; # resetuj wszystkie zmienne X
reset 'a-z'; # resetuj zmienne maloliterowe
reset; # resetuj tylko przeszukiwania ??
Resetowanie "A-Z" nie jest zalecane, gdy odniesie si ono rownie
do tablic ARGV i ENV. Resetowane s tylko zmienne
pakietu--zmienne leksykalne s nietykane, lecz one i tak
oczyszczaj si na wyjciu z zakresu. Zobacz opis my, znajdujcy si
gdzie w tym dokumencie.
return WYRA
return Powraca z podprocedury, eval(), lub z do PLIK, z wartoci podan
przez WYRA. Analiza WYRA moe zachodzi w kontekcie listowym,
skalarnym, lub pustym (void). Zaley to od sposobu uycia wartoci
zwracanej, a kontekst moe si zmienia od jednego wywolania do
drugiego (zobacz wantarray()). Jeli WYRA nie jest podane, w
kontekcie skalarnym zwracana jest warto niezdefiniowana, w
listowym pusta lista, a w pustym (void) nic.
(Zauwa, e przy braku return, podprocedura, eval, lub do PLIK
zakocz automatycznie z wartoci ostatniego wykonanego wyraenia.)
reverse LISTA
W kontekcie listowym, zwraca warto listow, skladajc si z
elementow LISTY, uloonych w przeciwnym porzdku. W kontekcie
skalarnym, elementy listy s lczone w lacuch i zwracane w
odwroconym porzdku.
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 zastrzeenia. Jeli warto jest w
oryginalnej tablicy zduplikowana, to tylko jedna z nich moe by
reprezentowana jako klucz w tablicy odwroconej. Musi to te
przewin cal tablic i zbudowa now, co dla duej tablicy moe troch
potrwa.
%by_name = reverse %by_address; # Inwersja tablicy asocjacyjnej
rewinddir UCHWYTKATALOGU
Ustawia biec pozycj (dla funkcji readdir()) na pocztek
katalogu, wskazywanego przez UCHWYTKATALOGU.
rindex STR,SUBSTR,POZYCJA
rindex STR,SUBSTR
Dziala tak samo jak index, lecz zwraca pozycj ostatniego
pojawienia si SUBSTR w STR. Jeli podano POZYCJ, to zwracane
jest ostatnie pojawienie na, lub przed t pozycj.
rmdir NAZWAPLIKU
rmdir Kasuje pusty katalog podany przez NAZWPLIKU. Jeli operacja si
powiedzie, zwraca 1. W przeciwnym wypadku zwracane jest zero i
ustawiane jest $! (errno). Jeli NAZWAPLIKU jest pominita,
uywane jest $_.
s/// Operator podmienienia. Zobacz stron perlop(1).
scalar WYRA
Wymusza interpretacj skalarn wyraenia WYRA i zwraca jego warto.
@counts = ( scalar @a, scalar @b, scalar @c );
Nie istnieje odpowiednik, konwertujcy skalar w list. Jest tak
dlatego, e w praktyce nie jest on nigdy potrzebny. Jeli jednak
naprawd chcesz tak zrobi, moesz uy konstrukcji @{[ (jakie
wyraenie) ]}, a zwykle powinno wystarczy zwykle (some
expression).
seek UCHWYTPLIKU,POZYCJA,GDZIE
Ustawia pozycj UCHWYTUPLIKU, podobnie jak fseek(3) w stdio.
UCHYTPLIKU moe by wyraeniem, ktorego warto daje nazw uchwytu
pliku. Wartoci GDZIE to 0, oznaczajce ustawianie nowej pozycji
na POZYCJ, 1 oznaczajce ustawianie pozycji na pozycj biec plus
POZYCJ, oraz 2 ustawiajce pozycj na EOF plus POZYCJ (zazwyczaj
ujemn). Zamiast numerycznych wartoci GDZIE, mona uywa stalych
SEEK_SET, SEEK_CUR i SEEK_END z modulu IO::Seekable lub POSIX.
Po sukcesie zwracane jest 1, po bldzie 0.
Jeli chcesz ustawi pozycj pliku dla sysread() i syswrite(), nie
uywaj seek() -- uyj sysseek().
Na niektorych systemach musisz wykona seek za kadym razem, gdy
przelczasz si midzy zapisem i odczytem. Wrod innych rzeczy, moe
to mie efekt wolania funkcji stdio clearerr(3). Warto GDZIE 1
jest przydatna do nie ruszania si z pozycji pliku:
seek(TEST,0,1);
Jest to rownie przydatne dla aplikacji, emulujcych tail -f. Gdy
raz wejdziesz na EOF, a potem zaniesz na chwil, to dobrze przed
nastpnym odczytem uy seek(), aby wszystko zresetowa. seek() nie
zmienia biecej pozycji, lecz czyci warunek EOF uchwytu, wic
nastpne <PLIK> powoduje, e perl znow co bdzie probowal odczyta.
Mamy przynajmniej tak nadziej.
Jeli to nie dziala (niektore stdio s szczegolnie dziwne), to
moesz potrzebowa czego wicej, jak:
for (;;) {
for ($curpos = tell(FILE); $_ = <FILE>; $curpos = tell(FILE)) {
# szukaj jakich rzeczy i wstaw je do plikow
}
sleep($for_a_while);
seek(FILE, $curpos, 0);
}
seekdir UCHWYTKATALOGU,POZYCJA
Ustawia biec pozycj polecenia readdir() dla katalogu
wskazywanego przez UCHWYTKATALOGU. POZYCJA musi mie warto
zwracan przez telldir().
select UCHWYTPLIKU
select Zwraca obecnie wybrany uchwyt pliku. Jeli podano UCHWYTPLIKU,
ustawia domylny uchwyt pliku dla wyjcia. Daje to dwa efekty: po
pierwsze write, lub print bez uchwytu pliku bd zapisywaly
domylnie do tego UCHWYTUPLIKU. Po drugie, odniesienia
zmiennych, zwizanych z wyjciem, bd si odnosily do tego kanalu
wyjcia. Np. jeli masz ustawi pocztek formatu formy dla wicej ni
jednego kanalu, moglby uy nastpujcego:
select(REPORT1);
$^ = 'report1_top';
select(REPORT2);
$^ = 'report2_top';
UCHWYTPLIKU moe by wyraeniem, ktore daje nazw rzeczywistego
uchwytu pliku. Tak wic:
$oldfh = select(STDERR); $| = 1; select($oldfh);
Niektorzy programici wol myle o uchwytach pliku jak o
obiektach, posiadajcych metody, zapisujc ostatni przyklad jako:
use IO::Handle;
STDERR->autoflush(1);
select RBITS,WBITS,EBITS,TIMEOUT
Funkcja ta wola z podanymi maskami bitowymi wywolanie systemowe
select(2). Maski mona skonstruowa, uywajc fileno() i vec():
$rin = $win = $ein = '';
vec($rin,fileno(STDIN),1) = 1;
vec($win,fileno(STDOUT),1) = 1;
$ein = $rin | $win;
Jeli chcesz wykonywa t funkcj na wielu uchwytach plikow, moesz
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);
Wikszo systemow nie zwraca niczego mdrego w $timeleft, wic
wywolanie select() w kontekcie skalarnym zwroci po prostu
$nfound.
Kada z masek bitowych moe by niezdefiniowana. Podany timeout
jest podawany w sekundach. Moe by ulamkowy. Uwaga: nie
wszystkie implementacje zwracaj $timeleft. Jeli go nie
zwracaj, to zwracaj warto rown tej, przekazanej w $timeout.
A oto 250 milisekundowe zanicie:
select(undef, undef, undef, 0.25);
UWAGA: Nie probuj lczy buforowanego I/O (np. read czy <FH>) z
funkcj select. Uyj zamiast tego sysread().
semctl ID,SEMNUM,CMD,ARG
Wola funkcj IPC semctl(2) z Systemu V. Jeli CMD to &IPC_STAT
lub &GETALL, to ARG musi by zmienn, ktora bdzie przechowywa
zwrocon struktur semid_ds, lub tablic wartoci semafora.
Podczas bldu, podobnie jak ioctl zwraca warto niezdefiniowan,
dla zera lacuch "0 but true", a dla pozostalych wartoci
rzeczywist warto zwrocon.
semget KLUCZ,NSEMS,FLAGI
Wola funkcj IPC semget(2) z Systemu V. Zwraca identyfikator
semafora, lub warto niezdefiniowan w przypadku bldu.
semop KLUCZ,LACUCHOP
Wola funkcj IPC semop(2) z Systemu V. Funkcja ta dokonuje
operacji semaforowych, np. sygnalizowania i czekania. LACUCHOP
musi by spakowan tablic struktur semop. Kad ze struktur semop
mona wygenerowa z pomoc pack("sss", $semnum, $semop, $semflag).
Liczba operacji semaforowych jest implikowana dlugoci LACUCHOP.
Po sukcesie, funkcja zwraca TRUE, a w wypadku bldu FALSE. Na
przyklad nastpujcy 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
Wysyla na gniazdo komunikat. Pobiera takie same flagi, jak
wywolanie systemowe send(2). Na gniazdach niepodlczonych, naley
poda cel wysylania, czyli argument DO. W tej sytuacji uyta
zostanie funkcja C sendto(2). Funkcja zwraca liczb wyslanych
znakow, lub w wypadku bldu warto niezdefiniowan. Zobacz
jeszcze sekcj UDP: Message Passing w podrczniku perlipc(1). S
tam przyklady.
setpgrp PID,PGRP
Ustawia biec grup procesow dla podanego PIDa (wynoszcego 0 dla
procesu biecego). Funkcja powoduje bld krytyczny na maszynach
nie implementujcych setpgrp(2). Jeli argumenty s pominite,
odnosi si to domylnie do 0,0. Zauwa, e wersja POSIX setpgrp()
nie przyjmuje adnych argumentow, wic przenone jest tylko
setpgrp 0,0.
setpriority CZYJE,KTO,PRIORYTET
Ustawia biecy priorytet procesu, grupy procesow, lub
uytkownika. (Zobacz setpriority(2).) Na maszynach nie
implementujcych tego wywolania systemowego, powoduje bld
krytyczny.
setsockopt GNIAZDO,POZIOM,NAZWAOPC,WARTOPC
Ustawia dan opcj gniazda. W wypadku bldu, zwraca warto
niezdefiniowan. Jeli nie chcesz przekazywa argumentu, WARTOPC
moe by podane jako undef.
shift TABLICA
shift Wysuwa pierwsz warto tablicy i zwraca j, skracajc tablic o 1 i
przenoszc wszystko w dol. Jeli w tablicy nie ma elementow,
zwracana jest warto niezdefiniowana. Jeli TABLICA zostanie
pominita, to przesuwana jest w programie glownym tablica @ARGV,
oraz @_ w podprocedurach. (Jest to okrelone leksykalnie.)
Zobacz te unshift(), push() oraz pop(). Shift() i unshift()
robi to samo na lewym kocu tablicy, co pop() i push() na
prawym.
shmctl ID,CMD,ARG
Wola funkcj IPC shmctl(2) z Systemu V. Jeli CMD jest &IPC_STAT,
to ARG musi by zmienn, ktora bdzie przechowywa zwrocon struktur
shmid_ds. Warto zwracana jest jak w ioctl: warto
niezdefiniowana dla bldu, "0 but true" dla zera i rzeczywista
warto zwrocona w innych wypadkach.
shmget KLUCZ,ROZMIAR,FLAGI
Wola funkcj IPC shmget(2) z Systemu V. Zwraca identyfikator
pamici dzielonej, a w przypadku bldu warto niezdefiniowan.
shmread ID,ZMIENNA,POZYCJA,ROZMIAR
shmwrite ID,LACUCH,POZYCJA,ROZMIAR
Odczytuje, lub zapisuje segment pamici dzielonej, rozpoczynajc
w pozycji POZYCJA i obslugujc rozmiar ROZMIAR bajtow. Podczas
odczytu, ZMIENNA musi by elementem, ktory bdzie przechowywal
odczytane dane. Podczas zapisywania, jeli LACUCH jest zbyt
dlugi, uytych zostanie tylko ROZMIAR bajtow; jeli LACUCH jest
zbyt krotki, to reszta zostanie wypelniona nullami. Funkcja
zwraca po sukcesie TRUE oraz FALSE w wypadku bldu.
shutdown GNIAZDO,JAK
Wylcza polczenie na gniedzie, w sposob wskazany przez JAK,
ktory ma tak sam interpretacj, jak w wywolaniu systemowym
shutdown(2).
sin WYRA
sin Zwraca sinus z WYRA (podanego w radianach). Jeli WYRA jest
pominite, zwracana jest warto dla $_.
Dla operacji odwrotnej do sinusa, moesz uy funkcji
POSIX::asin(), lub nastpujcej relacji:
sub asin { atan2($_[0], sqrt(1 - $_[0] * $_[0])) }
sleep WYRA
sleep Powoduje, e skrypt zasypia na WYRA sekund, lub na zawsze, jeli
nie podano WYRA. Spanie mona przerwa, przesylajc procesowi
SIGALRM. Zwraca ilo przespanych sekund. Przypuszczalnie nie
powinno si lczy wywola alarm() i sleep(), gdy sleep() jest
czsto implementowane przy uyciu alarm().
Na niektorych systemach, spanie moe trwa do sekundy mniej ni
dale, zalenie od sposobu obliczania sekund. Wikszo nowoczesnych
systemow przesypia caly okres.
Dla pauz, lub wikszej dokladnoci ni sekunda, moesz uy
interfejsu syscall() perla i dosta si do funkcji setitimer(2),
o ile jest ona obslugiwana przez twoj system. Moesz te zapozna
si z opisem select(), znajdujcym si gdzie w tym dokumencie.
Zobacz take funkcj sigpause() z modulu POSIX.
socket GNIAZDO,DOMENA,TYP,PROTOKOL
Otwiera gniazdo podanego typu i przywizuje je do uchwytu pliku
GNIAZDO. DOMENA, TYP i PROTOKOL s takie same jak dla wywolania
systemowego socket(2). Przed uywaniem tej funkcji, powiniene uy
"use Socket;", aby zaimportowa odpowiednie definicje. Obejrzyj
przyklad w sekcji Sockets: Client/Server Communication w
podrczniku perlipc(1).
socketpair GNIAZDO1,GNIAZDO2,DOMENA,TYP,PROTOKOL
Tworzy nienazwan par gniazd danego typu, w podanej domenie.
DOMENA, TYP i PROTOKOL s podawane tak samo, jak dla wywolania
systemowego socketpair(2). Jeli funkcja nie jest
zaimplementowana, to powoduje bld krytyczny. Po sukcesie
zwracane jest TRUE.
sort NAZWA LISTA
sort BLOK LISTa
sort LISTA
Sortuje LIST i zwraca posortowan warto listow. Jeli pominite
zostan parametry NAZWA lub BLOK, sortowanie nastpuje w porzdku
porownywania lacuchow. Jeli podano NAZW, to wskazuje ona na
podprocedur, zwracajc liczb calkowit, ktora jest mniejsza,
rowna, lub wiksza od zera, zalenie od tego, jak elementy
tablicy maj by poukladane. W takich procedurach bardzo
przydatne s operatory <=> oraz cmp. NAZWA moe by nazw zmiennej
skalarnej--w tym wypadku warto daje nazw uywanej podprocedury.
Zamiast NAZWY mona poda BLOK, czyli anonimow podprocedur
sortujc.
W celu polepszenia efektywnoci, pomijany jest normalny kod
wolania podprocedur: podprocedura nie moe by rekurencyjna, a
dwa porownywane elementy nie s przekazywane przez @_, lecz jako
globalne zmienna pakietu $a oraz $b (zobacz przyklad poniej). S
one przekazywane przez referencj, wic nie modyfikuj ani $a, ani
$b. Nie probuj te deklarowa ich jako leksykalne.
Nie mona te wyj z bloku sortujcego przy uyciu adnego operatora
kontroli ptli czy goto().
Gdy dziala use locale, sort LIST sortuje LIST wedlug
odpowiedniego locale. Zobacz stron perllocale(1).
Przyklady:
# sortuj leksykalnie
@articles = sort @files;
# to samo, z jawn procedur sortujc
@articles = sort {$a cmp $b} @files;
# teraz niewraliwie na wielko liter
@articles = sort {uc($a) cmp uc($b)} @files;
# to samo w odwrotnym porzdku
@articles = sort {$b cmp $a} @files;
# sortuj rosnco, numerycznie
@articles = sort {$a <=> $b} @files;
# j/w, malejco
@articles = sort {$b <=> $a} @files;
# sortuj, uywajc jawnej nazwy podprocedury
sub byage {
$age{$a} <=> $age{$b}; # zaloenie numerycznoci
}
@sortedclass = sort byage @class;
# to sortuje tablic asocjacyjn %age wedlug wartoci (zamiast klucza)
# przy uyciu 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 wedlug malejcego porownania numerycznego,
# uywajc pierwszej liczby calkowitej po znaku =, lub w przeciwnym
# wypadku caly rekord, bez zwracania uwagi na wielko liter.
@new = sort {
($b =~ /=(\d+)/)[0] <=> ($a =~ /=(\d+)/)[0]
||
uc($a) cmp uc($b)
} @old;
# to samo, duo efektywniej;
# zbudujemy zewntrzne 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 uyciu Schwartzian Transform (bez tymczasowych)
@new = map { $_->[0] }
sort { $b->[1] <=> $a->[1]
||
$a->[2] cmp $b->[2]
} map { [$_, /=(\d+)/, uc($_)] } @old;
Jeli uywasz strict, nie moesz deklarowa $a i $b jako
leksykalia. S one pakietowymi globaliami. Znaczy to, e jeli
jeste w pakiecie glownym (main), to jest to
@articles = sort {$main::b <=> $main::a} @files;
kub po prostu
@articles = sort {$::b <=> $::a} @files;
lecz jeli jeste w pakiecie FooPack, to jest to
@articles = sort {$FooPack::b <=> $FooPack::a} @files;
Funkcja porownujca musi si zachowywa [jednoznacznie]. Jeli
zwraca niespojne, nielogiczne wyniki (np. czasem mowic, e $x[1]
jest mniejsze ni $x[2], a czasem odwrotnie), to interpreter
perla prawdopodobnie si wysypie i zrzuci core. Wynika to
calkowicie z zalenoci od systemowej funkcji bibliotecznej
qsort(3); funkcja ta czsto nie dokonuje pewnych sprawdze w celu
polepszenia szybkoci.
splice TABLICA,OFFSET,DLUGO,LISTA
splice TABLICA,OFFSET,DLUGO
splice TABLICA,OFFSET
Usuwa z tablicy elementy wskazane przez OFFSET i DLUGO, oraz
zamienia je ewentualnie podanymi elementami LISTY. Zwraca
elementy, ktore zostaly z tablicy usunite. Tablica zgodnie z
potrzebami ronie, lub maleje. Jeli parametr DLUGO zostanie
pominity, to usuwane jest wszystko, poczynajc od OFFSET. A oto
pewne rownowanoci (zakladajc, 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);
Przyklad, przy zaloeniu, e dlugoci tablic s przekazywane przed
tablicami:
sub aeq { # porownaj dwie wartoci listowe
local(@a) = splice(@_,0,shift);
local(@b) = splice(@_,0,shift);
return 0 unless @a == @b; # ta sama dlugo?
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 lacuch na tablic lacuchow i zwraca t tablic.
Jeli nie jest w kontekcie listowym, to zwraca list znalezionych
pol i dzieli do tablicy @_. (w kontekcie listowym moesz wymusi
dzielenie do @_, uywajc jako rozdzielaczy wzorca ??, lecz bdzie
wci zwraca warto tablicow.) Uywanie jawnego dzielenia do @_ nie
jest jednak zalecane.
Jeli WYRA jest pominity, dzielony jest lacuch $_. Jeli pominity
jest te WZORZEC, dzielenie nastpuje na bialych spacjach (po
pominiciu wszelkich prowadzcych bialych spacji). Wszystko,
odpowiadajce WZORCOWI jest uwaane za rozdzielacz pol. (Zauwa, e
rozdzielacz moe by dluszy ni jeden znak.) Jeli podano warto
LIMIT i nie jest to liczba ujemna, dzielenie nastpuje do nie
wicej ni tej iloci pol. Jeli LIMIT nie jest podany, koczce
wypelnienia nullowe s obcinane (co dobrze pamita uytkownikom
pop()). Jeli LIMIT jest ujemny, to jest traktowany tak, jakby
podano arbitralnie duy LIMIT.
Wzorzec, odpowiadajcy lacuchowi null (eby nie by zmylonym ze
wzorcem null //, ktory jest tylko jednym czlonkiem z zestawu
wzorcow odpowiadajcych lacuchowi null) bdzie dzielil warto WYRA
na oddzielne znaki w kadym punkcie, ktory odpowie zapytaniu.
Na przyklad:
print join(':', split(/ */, 'hi there'));
da w wyniku 'h:i:t:h:e:r:e'.
Parametr LIMIT moe by uyty do podzielenia linii czciowo
($login, $passwd, $remainder) = split(/:/, $_, 3);
Podczas przypisywania do listy, jeli nie podano LIMITU, perl
ustawia domylny limit wielkoci o 1 wikszej ni lista zmiennych
na licie, zapobiegajc tak niepotrzebnej pracy. Dla powyszej
listy, LIMIT bylby ustawiony domylnie na 4. W aplikacjach,
gdzie czas jest krytycznym czynnikiem, powstrzymuje ci to od
dzielenia na wicej pol, ni rzeczywicie potrzebujesz.
Jeli WZORZEC zawiera nawiasy, z lacuchow odpowiadajcym
podlacuchom rozdzielacza tworzone s dodatkowe elementy tablicy.
split(/([,-])/, "1-10,20", 3);
daje warto listow
(1, '-', 10, ',', 20)
Jeli masz caly naglowek normalnego unixowego komunikatu
pocztowego w naglowku $header, to moesz rozdzieli go na pola i
wartoci w nastpujcy sposob:
$header =~ s/\n\s+/ /g; # obslu linie kontynuacji
%hdrs = (UNIX_FROM => split /^(.*?):\s*/m, $header);
Wzorzec /WZORZEC/ moe by zamieniony wyraeniem, umoliwiajc tak
podawanie wzorcow, ktore zmieniaj si w czasie. (aby dokona
kompilacji czasu dzialania tylko raz, uyj /$variable/o.)
Specjalnym przypadkiem jest podanie jako WZORZEC spacji (' ').
Bdzie to powodowa dzielenie na bialych spacjach, podobnie jak
domylna wersja split. Tak wic split(' ') moe by uywany do
domylnego zachowania awk, gdzie split(/ /) daje tyle lacuchow
null, ile jest prowadzcych bialych spacji. Split dla /\s+/ jest
podobny do split(' '), lecz dowolna biala spacja powoduje null
na pierwszym polu. Split bez argumentow dokonuje w
rzeczywistoci wewntrznie split(' ', $_).
Przyklad:
open(passwd, '/etc/passwd');
while (<passwd>) {
($login, $passwd, $uid, $gid, $gcos,
$home, $shell) = split(/:/);
...
}
(Zauwa, e $shell w powyszym bdzie mial za sob now lini. Aby j
usun, zapoznaj si z funkcjami chop, chomp i join, opisanymi
gdzie w tym dokumencie.)
sprintf FORMAT, LISTA
Zwraca lacuch, sformatowany wedlug konwencji printf, funkcji
bibliotecznej jzyka C, sprintf(3).
Perl emuluje funkcj C sprintf(), lecz nie uywa jej (poza
liczbami zmiennoprzecinkowymi, a nawet wtedy dozwolone s tylko
standardowe modyfikatory). W wyniku, w perlu nie s dostpne adne
niestandardowe rozszerzenia lokalnej wersji sprintf().
Perlowy sprintf() zezwala na nastpujce, ogolnie znane
konwersje:
%% znak procentu
%c znak o podanym kodzie
%s lacuch
%d integer ze znakiem, dziesitnie
%u integer bez znaku, dziesitnie
%o integer bez znaku, osemkowo
%x integer bez znaku, szesnastkowo
%e liczba zmiennoprzecinkowa w notacji naukowej
%f liczba zmiennoprzecinkowa w ustalonej notacji dziesitnej
%g liczba zmiennoprzecinkowa w notacji %e lub %f
Dodatkowo, perl zezwala na nastpujce szeroko-obslugiwane
konwersje:
%X podobne do %x, lecz na duych literach
%E podobne do %e, lecz z uyciem duego E
%G podobne do %g, lecz z uyciem duego E
%p wskanik (daje adres wartoci, podany szesnastkowo)
%n specjalne: przechowuje liczb dotychczas wpisanych do nastpnej
zmiennej z listy parametrow
I w kocu, dla kompatybilnoci wstecznej, perl zezwala na ponisze
zbyteczne, lecz szeroko obslugiwane konwersje:
%i synonim %d
%D synonim %ld
%U synonim %lu
%O synonim %lo
%F synonim %f
Perl zezwala na uycie nastpujcych uniwersalnych flag midzy
znakiem %, a liter konwersji:
spacja poprzed liczb dodatni spacj
+ poprzed liczb dodatni plusem
- wyrownuj do lewej w obszarze pola
0 uyj zer zamiast spacji do wyrownywania w prawo
# poprzed liczb osemkow "0", szesnastkow "0x"
liczba minimalna wielko pola
.liczba "precyzja": liczba cyfr po kropce dziesitnej dla
zmiennoprzecinkowych, maksymalna dlugo dla lacucha, lub
minimalna dlugo dla liczby calkowitej (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, mona uy gwiazdki
("*"). W tym wypadku perl uywa zamiast liczby wartoci nastpnego
argumentu z listy parametrow. Jeli szeroko pola, uzyskana przez
"*" jest ujemna, to ma to samo dzialanie, co flaga '-':
wyrownywanie do lewej.
Jeli dziala use locale, znaki uywane do kropki dziesitnej bd
drukowane wedlug locale LC_NUMERIC. Zobacz stron perllocale(1).
sqrt WYRA
sqrt Zwraca pierwiastek kwadratowy z WYRA. Jeli WYRA jest pominite,
zwraca warto dla $_.
srand WYRA
srand Ustawia nasionko liczby losowej dla operatora rand. Jeli
pominite zostanie WYRA, uywana jest pseudolosowa warto, oparta
o biecy czas i identyfikator procesu. W wersjach perla
wczeniejszych ni 5.004, domylnym nasionkiem byl po prostu biecy
czas time(). Nie jest to szczegolnie dobre nasionko, wic wiele
starych programow zalczalo swoj wlasn warto inicjujc (czsto
time ^ $$, lub C<time ^ ($$ + ($$ << 15))>), lecz teraz nie
jest to konieczne.
W rzeczywistoci, zazwyczaj w ogole nie jest konieczne
wywolywanie srand, poniewa jest ono wywolywane niejawnie przy
pierwszym uyciu operatora rand. Jednak nie bylo tak w wersjach
wczeniejszych ni perl 5.005, wic jeli twoj skrypt ma dziala ze
starszymi wersjami, powinien jednak wola srand().
Zauwa, e dla potrzeb kryptografii potrzebujesz czego wicej ni
tylko wylosowa domylne nasionko. Popularn metod jest
sprawdzanie sum kontrolnych skompresowanego wyjcia z jednego,
lub wicej programow szybko zmieniajcego si statusu systemu
operacyjnego. Na przyklad:
srand (time ^ $$ ^ unpack "%L*", `ps axww | gzip`);
Jeli naprawd ci na tym zaley, zobacz modul Math::TrulyRandom w
CPAN.
Nie wolaj srand() wielokrotnie, chyba e dokladnie wiesz co i w
jakim celu robisz. Celem tej funkcji jest zasilenie funkcji
rand() tak, by rand() zwracal inn sekwencj dla kadego
uruchomienia programu. Zrob to raz, na samym pocztku programu,
bo w przeciwnym wypadku nie uzyskasz z rand() liczb losowych!
Czsto wywolywane programy (takie jak skrypty CGI), ktore jako
nasionka uywaj po prostu
time ^ $$
mog pa ofiar wlasnoci matematycznej, e
a^b == (a+1)^(b+1)
przez jedn trzeci czasu. Wic nie rob tego.
stat UCHWYTPLIKU
stat WYRA
stat Zwraca 13 elementow tablic, opisujc status pliku--otwartego
przez UCHWYTPLIKU lub nazwanego przez WYRA. Jeli WYRA jest
pominite, uywany jest $_. Gdy funkcja zawiedzie, zwraca list
null. Zazwyczaj jest to uywane nastpujco:
($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,
$atime,$mtime,$ctime,$blksize,$blocks)
= stat($filename);
Nie wszystkie z tych pol s obslugiwane na wszystkich rodzajach
systemow plikow. Oto znaczenia pol:
0 dev numer urzdzenia systemu plikow
1 ino numer inode
2 mode prawa pliku (typ i prawa)
3 nlink liczba twardych dowiza do pliku
4 uid numeryczny UID wlaciciela
5 gid numeryczny GID wlaciciela
6 rdev identyfikator urzdzenia (tylko dla plikow specjalnych)
7 size calkowity rozmiar w bajtach
8 atime ostatni dostp od epoki
9 mtime ostatnia modyfikacja od epoki
10 ctime ostatnia zmiana inode od epoki
11 blksize preferowany rozmiar bloku dla I/O systemu plikow
12 blocks rzeczywista liczba zaalokowanych blokow
(Epoka nastpila o 00:00 1 stycznia, 1970 GMT.)
Jeli funkcja dostanie specjalny uchwyt pliku, skladajcy si z
podkrelenia, to nie jest ona wykonywana, lecz przekazywana jest
zawarto ostatniego testu pliku. Przyklad:
if (-x $file && (($d) = stat(_)) && $d < 0) {
print "$file jest wykonywalnym plikiem NFS\n";
}
(Dziala to tylko na maszynach, dla ktorych numer urzdzenia jest
ujemny dla NFS.)
study SKALAR
study Zajmuje troch czasu, by przestudiowa SKALAR (lub $_, jeli go
nie podano), przygotowujc si na wiele przeszukiwa wzorcow na
tym lacuchu, przed jego kolejn modyfikacj. Moe to pozwoli zyska
na czasie, zalenie od natury i liczby wzorcow, a take od
rozloenia czstotliwoci znakow w przeszukiwanym lacuchu.
Najlepiej sprawdzi empirycznie, czy funkcja ta wplywa na szybko
dodatnio, czy ujemnie. Najwicej zyskaj ptle, szukajce wielu
krotkich, stalych lacuchow (wlczajc stale czci bardziej
zloonych wzorcow). Naraz mona mie obslugiwany przez study tylko
jeden lacuch. Jeli przejdziesz na inny skalar, to poprzedni
stanie si nieprzestudiowany. (study dziala nastpujco: najpierw
robiona jest lista powizana dla kadego znaku przeszukiwanego
lacucha, tak e wiemy na przyklad gdzie znajduj si wszystkie
znaki 'k'. W kadym szukanym lacuchu wybierany jest w oparciu o
statyczne tablice rozkladu najrzadziej wystpujcy znak. Lacuch
jest poszukiwany w miejscach, gdzie znajduje si ten najrzadszy
znak.)
Na przyklad oto ptla, ktora wstawia wpisy tworzce indeks przed
kad lini, zawierajc okrelony 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;
}
Uycie study spowoduje szukanie /\bfoo\b/ tylko w miejscach $_,
ktore zawieraj "f", gdy jest to najrzadszy znak. Ogolnie, daje
to due zyski, poza przypadkami patologicznymi. Jedynym pytaniem
jest to, czy zachowuje ci to wicej czasu ni zabralo zbudowanie
powizanej listy.
Zauwa, e jeli musisz szuka lacuchow, o ktorych nic nie wiesz, a
do uruchomienia, to moesz zbudowa cal ptl jako lacuch i evalowa
to, by zapobiec ciglemu rekompilowaniu wzorcow. W polczeniu z
czynieniem $/ niezdefiniowanym, aby wessa cale pliki jako jeden
rekord, moe to by bardzo szybkie, czsto szybsze ni
specjalizowane programy typu fgrep(1). Nastpujcy przyklad
skanuje list plikow (@files) w poszukiwaniu listy slow (@words)
i drukuje nazwy plikow, zawierajcych 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 wejcia
foreach $file (sort keys(%seen)) {
print $file, "\n";
}
sub BLOK
sub NAZWA
sub NAZWA BLOK
Nie jest to prawdziwa funkcja, lecz definicja podprocedury.
Jeli zawiera tylko NAZW (i przypuszczalnie prototypy), jest to
tylko deklaracja. Bez NAZWY jest to deklaracja anonimowej
funkcji i zwraca warto: referencj CODE zawenia, ktore wlanie
utworzyle. Dla dalszych szczegolow, zobacz stron podrcznika
perlref(1).
substr WYRA,OFFSET,DLUGO
substr WYRA,OFFSET
Wyciga z WYRA podlacuch i zwraca go. Pierwszy znak znajduje si
pod offsetem 0, lub tym, na co ustawile $[ (lecz nie rob tego).
Jeli OFFSET jest ujemny, rozpoczyna si w tej odlegloci od koca
lacucha. Jeli DLUGO jest pominita, zwracane jest wszystko, a do
koca lacucha. Jeli DLUGO jest ujemna, pozostawia tyle znakow z
koca lacucha.
Funkcji substr() moesz uy jako lwartoci, w ktorym wypadku WYRA
musi by lwartoci. Jeli przyznasz co krotszego ni DLUGO, lacuch
zostanie skrocony, a jeli co dluszego, to lacuch zostanie
rozcignity. Aby zachowa stal dlugo lacucha, moesz potrzebowa
dopelni, lub obci wartoci przy uyciu sprintf().
symlink STARYPLIK,NOWYPLIK
Tworzy now nazw pliku, dowizan symbolicznie do starej. Po
sukcesie zwraca 1, w przeciwnym wypadku 0. Na systemach nie
obslugujcych dowiza symbolicznych, funkcja ta powoduje bld
krytyczny podczas dzialania. Aby go wychwyci, uyj eval:
$symlink_exists = (eval {symlink("","")};, $@ eq '');
syscall LISTA
Wywoluje wywolanie systemowe, podane jako pierwszy element
listy, przekazujc reszt elementow jako argumenty wywolania.
Jeli nie jest to zaimplementowane, powoduje bld krytyczny.
Argumenty s interpretowane nastpujco: jeli podany argument jest
numeryczny, przekazywany argument to int. Jeli nie,
przekazywany jest wskanik do wartoci tekstowej. Odpowiadasz za
upewnienie si, e lacuch jest do dlugi, by odebra okrelony
wynik, ktory moe by do niego zapisany. Jeli twoje argumenty int
nie s literalami i nie byly nigdy interpretowane w kontekcie
numerycznym, moesz by zmuszonym doda do nich 0, aby wymusi na
nich wygld liczbowy.
require 'syscall.ph'; # moe by niezbdne h2ph
syscall(&SYS_write, fileno(STDOUT), "hi there\n", 9);
Zauwa, e perl obsluguje przekazywanie do 14 argumentow do
wywolania systemowego, co w praktyce powinno wystarczy.
sysopen UCHWYTPLIKU,NAZWAPLIKU,TRYB
sysopen UCHWYTPLIKU,NAZWAPLIKU,TRYB,PRAWA
Otwiera plik NAZWAPLIKU i wie go z UCHWYTEMPLIKU. Jeli
UCHWYTPLIKU jest wyraeniem, to jego warto jest uywana jako
nazwa rzeczywistego uchwytu pliku. Funkcja ta wola podlegajc
jej funkcj systemu operacyjnego, open z parametrami NAZWAPLIKU,
TRYB, PRAWA.
Prawidlowe wartoci i bity flag parametru TRYB s zalene od
systemu; s one dostpne przez standardowy modul Fcntl. Jednak z
przyczyn historycznych, niektore wartoci s uniwersalne; zero
oznacza tylko dla odczytu, jeden tylko dla zapisu, a dwa dla
zapisu i odczytu.
Jeli plik NAZWAPLIKU nie istnieje, a wywolanie open go tworzy
(zazwyczaj dlatego, e TRYB zawiera flag O_CREAT), to warto PRAW
okrela prawa nowo utworzonego pliku. Jeli s one pominite,
uywana jest domylna warto 0666, ktora umoliwia wszystkim odczyt
i zapis. Warto ta ma sens, zobacz umask.
Modul IO::File daje bardziej obiektowe podejcie do tych rzeczy.
sysread UCHWYTPLIKU,SKALAR,DLUGO,OFFSET
sysread UCHWYTPLIKU,SKALAR,DLUGO
Probuje odczyta DLUGO bajtow danych do zmiennej SKALAR. Odczyt
nastpuje z pliku wskazywanego przez UCHWYTPLIKU, przy uyciu
wywolania systemowego read(2). Pomija to stdio, wic lczenie tej
funkcji z innym rodzajami odczytu, z print(), write(), seek(),
lub tell() moe powodowa problemy. Zwraca ilo odczytanych
bajtow, lub undef w wypadku bldu. SKALAR bdzie rozcigany tak,
by pasowal do liczby odczytanych bajtow.
Aby spowodowa odczyt danych z ktorego miejsca lacucha (ronego
ni pocztek), mona poda dodatkowo parametr OFFSET. Jeli parametr
ten jest ujemny, to wskazywana jest pozycja przesunita o tyle
bajtow w tyl od koca lacucha. Jeli dodatni offset jest wikszy
od dlugoci SKALARA, to wynikiem jest wypelnienie do wymaganego
rozmiaru znakami "\-", a nastpnie doklejenie odczytu.
sysseek UCHWYTPLIKU,POZYCJA,GDZIE
Zmienia pozycj UCHWYTUPLIKU przy uyciu wywolania systemowego
lseek(2). Pomija stdio, wic lczenie tego z odczytami (innymi ni
sysread()), z print(), write(), seek(), lub tell() moe
wprowadzi problemy. UCHWYTPLIKU moe by wyraeniem, ktorego warto
daje nazw uchwytu pliku. Wartoci dla GDZIE to 0 dla ustawienia
nowej pozycji, 1 dla dodania nowej pozycji do biecej i 2 do
ustawienia pozycji EOF plus offset. Dla parametru GDZIE mona
uywa stalych SEEK_SET, SEEK_CUR i SEEK_END z modulu
IO::Seekable lub POSIX.
Zwracana jest nowa pozycja, lub warto niezdefiniowana w wypadku
bldu. Pozycja zerowa zwracana jest jako lacuch "0 but true";
tak wic sysseek() zwraca TRUE po sukcesie i FALSE po bldzie,
lecz wci moesz latwo ustali now pozycj.
system LISTA
Robi dokladnie to samo, co "exec LISTA", poza tym, e dokonuje
przed tym forka i proces rodzicielski czeka, a dziecko dokona
ywota. Zauwa, e przetwarzanie argumentow roni si, zalenie od
liczby argumentow. Warto zwracana jest statusem wyjcia
programu, zwroconym przez wywolanie wait(). Aby uzyska
rzeczywist warto wyjcia, podziel j przez 256. Zobacz te opis
exec, znajdujcy si gdzie w tym dokumencie. Nie jest to sposob,
ktorego naley uywa do przechwytywania wyjcia z komendy, dla
tego celu uyj zwyklych odwroconych apostrofow (backticks?) lub
qx//, jak opisano w sekcji `/LACUCH` podrcznika perlop(1).
Poniewa zarowno 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 powiodl: $?"
A oto bardziej wyrafinowany przyklad analizowania wartoci
zwracanej przez system(). Ma to miejsce na systemie unixowym i
jest robione, aby sprawdzi wszystkie moliwoci, wlcznie z
sygnalami i zrzutami core.
$rc = 0xffff & system @args;
printf "system(%s) zwrocil %#04x: ", "@args", $rc;
if ($rc == 0) {
print "normalne zakoczenie\n";
}
elsif ($rc == 0xff00) {
print "komenda si nie powiodla: $!\n";
}
elsif ($rc > 0x80) {
$rc >>= 8;
print "niezerowy status wyjcia $rc\n";
}
else {
print "skoczyl z ";
if ($rc & 0x80) {
$rc &= ~0x80;
print "zrzutem core z ";
}
print "sygnalem $rc\n"
}
$ok = ($rc != 0);
syswrite UCHWYTPLIKU,SKALAR,DLUGO,OFFSET
syswrite UCHWYTPLIKU,SKALAR,DLUGO
Probuje zapisa DLUGO bajtow ze SKALARA do pliku podanego przez
UCHWYTPLIKU przy uyciu wywolania systemowego write(2). Pomija
stdio, wic lczenie tego z odczytami (innymi ni sysread()), z
print(), write(), seek(), lub tell() moe spowodowa problemy.
Zwraca liczb zapisanych bajtow, lub undef w wypadku bldu. Jeli
dlugo jest wiksza ni dostpne dane, zapisywanych jest tylko tyle
danych, ile jest dostpnych.
Dodatkowo mona poda OFFSET, aby zapisa dane z jakiej czci
lacucha, ktora nie jest pocztkiem. Ujemna warto offsetu
nakazuje zapisywanie od miejsca, przesunitego o tyle bajtow od
koca lacucha.
tell UCHWYTPLIKU
tell Zwraca biec pozycj pliku dla UCHWYTUPLIKU. UCHWYTPLIKU moe by
wyraeniem, ktorego warto podaje nazw rzeczywistego uchwytu
pliku. Jeli UCHWYTPLIKU jest pominity, zakladany jest plik, z
ktorego ostatnio czytano.
telldir UCHWYTKATALOGU
Zwraca biec pozycj funkcji readdir() dla UCHWYTUKATALOGU. Do
seekdir() mona przekaza warto, kac osignc okrelon pozycj w
katalogu.
tie ZMIENNA,NAZWAKLASY,LISTA
Funkcja ta lczy zmienn z klas pakietu, ktora opisuje jej
implementacj. ZMIENNA jest nazw czarowanej zmiennej.
NAZWAKLASY jest nazw klasy, implementujcej obiekty wlaciwego
typu. Wszelkie dodatkowe argumenty s przekazywane metodzie
"new" klasy (czyli TIESCALAR, TIEARRAY, lub TIEHASH).
Zazwyczaj, argumenty te wygldaj tak, jak te, ktore s
przekazywane funkcji dbm_open() z C. Obiekt, zwrocony przez
metod "new" jest te zwracany przez tie(), co jest przydatne,
jeli chcesz dosta si do innych metod w NAZWIEKLASY.
Zauwa, e funkcje takie, jak keys() i valuse() mog zwraca
wielkie wartoci tablicowe, jeli uy je na duych obiektach,
takich jak pliki DBM. Lepiej moe by uy funkcji each() i na nich
iterowa. Przyklad:
# 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, implementujca tablic asocjacyjn, powinna mie nastpujce
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, implementujca zwykl tablic, powinna mie nastpujce
metody:
TIEARRAY classname, LIST
DESTROY this
FETCH this, key
STORE this, key, value
[others TBD]
Klasa, implementujca skalar, powinna mie nastpujce metody:
TIESCALAR classname, LIST
DESTROY this
FETCH this,
STORE this, value
W przeciwiestwie do funkcji dbmopen(), funkcja tie() nie uywa,
lub wymaga dla ciebie modulow (use, require)--musisz o to zadba
samodzielnie. Zobacz podrcznik DB_File oraz modul Config dla
interesujcych implementacji tie().
tied ZMIENNA
Zwraca referencj do obiektu kryjcego si pod ZMIENN (warto,
ktora byla pocztkowo zwrocona przez tie(), ktore powizal zmienn
z pakietem.) Gdy ZMIENNA nie jest powizana, zwracana jest warto
niezdefiniowana.
time Zwraca liczb sekund od pocztku epoki (tj. na MacOs od 00:00:00,
1 Stycznia, 1904, a od 00:00:00 UTC, 1 Stycznia, 1970 dla
wikszoci innych systemow). Wystarczajce do przekazania dla
gmtime() lub localtime().
times Zwraca czteroelementow tablic, podajc w sekundach czasy
uytkownika i systemu. Wartoci 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,DLUGO
truncate WYRA,DLUGO
Skraca plik, otwarty na UCHWYCIEPLIKU lub nazwany przez WYRA do
podanej dlugoci. Na systemach, gdzie nie jest to
zaimplementowane, powoduje bld krytyczny.
uc WYRA
uc Zwraca WYRA w duych literach. Jest to funkcja wewntrzna,
implementujca escape \U na lacuchach ujtych w podwojne
cudzyslowy. Szanuje biece ustawienie LC_CTYPE, jeli wlczono
use locale. Zobacz podrcznik perllocale(1).
Jeli WYRA jest pominite, uywa $_.
ucfirst WYRA
ucfirst Zwraca WYRA, z pierwszym znakiem zmienionym na du liter. Jest
to funkcja wewntrzna, implementujca escape \u na lacuchach
ujtych w cudzyslowy. Szanuje biece ustawienie LC_CTYPE, jeli
wlczono use locale. Zobacz podrcznik perllocale(1).
If EXPR is omitted, uses $_.
umask WYRA
umask Ustawia umask procesu na WYRA i zwraca warto poprzedni. Jeli
WYRA jest pominite, po prostu zwraca biec umask. Pamitaj, e
umaska jest liczb, zazwyczaj podawan osemkowo; nie jest
lacuchem cyfr osemkowych. Zobacz opis oct, znajdujcy si gdzie w
tym dokumencie, jeli masz tylko lacuch.
undef WYRA
undef Powoduje, e warto WYRA, ktora musi by lwartoci, staje si
niezdefiniowana. Uywaj tego tylko na wartociach skalarnych,
calej tablicy, calej tablicy asocjacyjnej, lub na nazwie
podprocedury (przy uyciu "&"). (Uywanie tej funkcji w innych
wypadkach przypuszczalnie nie doprowadzi do takich rezultatow,
jakich mona by oczekiwa.) Zawsze zwraca warto niezdefiniowan.
Moesz pomin WYRA--w tym wypadku nic nie jest pozbawiane
zdefiniowania, lecz mimo to uzyskujesz warto niezdefiniowan,
ktor moesz np. zwroci z podprocedury, przypisa zmiennej,lub
przekaza jako parametr. Przyklady:
undef $foo;
undef $bar{'blurfl'}; # Porownaj 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 zwrocon warto
unlink LISTA
unlink Kasuje list plikow. Zwraca liczb skasowanych plikow.
$cnt = unlink 'a', 'b', 'c';
unlink @goners;
unlink <*.bak>;
Uwaga: unlink nie skasuje katalogow, chyba e jeste
superuytkownikiem i przekazale perlowi flag -U. Nawet gdy te
warunki s spelnione, bd ostrzeony, e skasowanie katalogu moe
wywola uszkodzenie systemu plikow. Zamiast tego uyj rmdir.
Jeli LISTA jest pominita, uywa $_.
unpack WZORZEC,WYRA
Unpack robi odwrotno tego, co pack: pobiera lacuch,
reprezentujcy struktur i rozwija go na list wartoci, zwracaj
warto tablicow (w kontekcie skalarnym zwraca tylko pierwsz
warto tablicy). WZORZEC jest tego samego formatu co dla funkcji
pack. Oto podprocedura, ktora 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, moesz poprzedzi pola %<liczb>, wskazujc, e chcesz
<liczba>-bitow sum szesnastkow elementow, zamiast samych
elementow. Domylna jest suma 16-bitowa. Na przyklad, nastpujcy
przyklad oblicza t sam liczb co program sum z Systemu V:
while (<>) {
$checksum += unpack("%16C*", $_);
}
$checksum %= 65536;
Nastpujcy fragment efektywnie oblicza liczb ustawionych bitow w
wektorze bitowym:
$setbits = unpack("%32b*", $selectmask);
untie ZMIENNA
Rozbija powizanie midzy zmienn, a pakietem. Zobacz tie().
unshift TABLICA,LISTA
Robi odwrotn rzecz do shift. Lub odwrotn do push, zalenie jak
na to spojrze. Dokleja list do pocztku tablicy i zwraca now
liczb elementow.
unshift(ARGV, '-e') unless $ARGV[0] =~ /^-/;
Zauwa, e LISTA jest doklejana cala, a nie jeden element naraz,
wic doklejone elementy pozostaj w tej samej kolejnoci. Aby j
odwroci, uyj reverse.
use Module LISTA
use Module
use Module WERSJA LISTA
use WERSJA
Importuje semantyk danego modulu do biecego pakietu. Ogolnie
aliasuje okrelone podprocedury lub nazwy zmiennych do twojego
pakietu. Jest to dokladnie rownowane
BEGIN { require Module; import Module LIST; }
poza tym, e Module musi by golym slowem.
Jeli pierwszy argument use jest liczb, to jest ona traktowana
jako numer wersji, zamiast nazwa modulu. Jeli wersja
interpretera perla jest mniejsza ni WERSJA, to wywietlony
zostanie komunikat o bldzie, a perl natychmiast zakoczy
dzialanie. Jest to czsto przydatne, jeli chcesz sprawdzi wersj
perla przed uywaniem modulow bibliotecznych, ktore zmienily si
w sposob niekompatybilny od czasu starszych wersji perla.
(staramy si by tak nie bylo.)
Slowo BEGIN wymusza by require i import zaszly podczas
kompilacji. Require zapewnia, e modul bdzie zaladowany do
pamici, jeli wczeniej nie byl. Import nie jest wbudowany--jest
to tylko zwykle, statyczne wywolanie metody pakietu "Module"
aby powiedzie modulowi, by zaimportowal list wlaciwoci do
pakietu biecego. Modul moe implementowa swoj metod import w
dowolny sposob, cho wikszo modulow woli wyprowadza swoj metod
poprzez dziedziczenie z klasy Exporter, zdefiniowanej w module
Exporter, Zobacz podrcznik Exporter. Jeli nie ma adnej metody
importujcej, to bld jest cicho ignorowany. Moe si to w
przyszlych wersjach zmieni na bld krytyczny.
Jeli nie chcesz zmieniania swojej przestrzeni nazw, zalcz
jawnie pust list:
use Module ();
Jest to dokladnie rownowane
BEGIN { require Module; }
Jeli midzy Module, a LISTA jest obecny argument WERSJA, to use
wywola metod VERSION klasy Module z podan wersj, jako
argumentem. Domylna metoda VERSION, dziedziczona z klasy
Universal, zakracze jeli podana wersja jest wiksza ni warto
zmiennej $Module::VERSION. (Zauwa, e nie ma przecinka po
WERSJI!)
Poniewa jest to szeroko otwarty interfejs, mona 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 moduly importuj semantyk do biecego zakresu bloku, w
przeciwiestwie do zwyklych modulow, ktore importuj symbole do
biecego pakietu.
Istnieje odpowiadajca komenda "no", ktora de-importuje rzeczy
zaimportowane przez use, np. wywoluje metod unimport Module
LISTA zamiast import.
no integer;
no strict 'refs';
Jeli nie ma metody unimport, wywolanie to koczy si bldem
krytycznym.
Dla listy standardowych modulow i pragm, zobacz podrcznik
perlmod.
utime LISTA
Zmienia czasy dostpu i modyfikacji na kadym pliku z listy.
Pierwsze dwa elementy listy musz by numerycznymi czasami dostpu
i modyfikacji, dokladnie w tej kolejnoci. Zwraca liczb plikow,
na ktorych operacja si powiodla. Czas modyfikacji inode jest
ustawiany na czas biecy. Przyklad komendy "touch":
#!/usr/bin/perl
$now = time;
utime $now, $now, @ARGV;
values HASH
Zwraca normaln tablic, skladajc si ze wszystkich wartoci
wymienionej tablicy asocjacyjnej. W kontekcie skalarnym,
zwracana jest liczba wartoci. Wartoci s zwracane w do losowej
kolejnoci, 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 lacuch WYRA jako wektor calkowitych integerow i zwraca
warto pola bitowego, wskazanego przez OFFSET. BITY podaj liczb
bitow, ktore s zarezerwowane dla kadego wpisu w wektorze
bitowym. Musi to by potga dwojki do 1 do 32. vec moe te by
przypisany do czego--w tym wypadku potrzebne s nawiasy, aby
nada wyraeniu wlaciwy priorytet, jak w
vec($image, $max_x * $x + $y, 8) = 3;
Wektory utworzone przez vec() mog te by obslugiwane przez
operatory logiczne |, & i ^, ktore zalo, e bitowa operacja
wektorowa jest oczekiwana gdy obydwa operandy s lacuchami.
Aby przeksztalci wektor bitowy na tablic lacuchow zer i
jedynek, uyj:
$bits = unpack("b*", $vector);
@bits = split(//, unpack("b*", $vector));
Jeli znasz dokladn dlugo w bitach, moesz poda j zamiast *.
wait Czeka, a proces potomny si nie zakoczy i zwraca pid zamknitego
procesu, lub -1, jeli go nie bylo. Status jest zwracany w $?.
waitpid PID,FLAGI
Czeka, a proces potomny si zakoczy i zwraca pid zamknitego
procesu, lub -1, jeli nie bylo takiego procesu. Status jest
zwracany w $?. Jeli powiesz
use POSIX ":sys_wait_h";
...
waitpid(-1,&WNOHANG);
to moesz dokona nieblokujcego oczekiwania na dowolny proces.
Nieblokujce oczekiwanie jest dostpne na maszynach, obslugujcych
albo wywolanie waitpid(2), albo wait4(2). Jednak oczekiwanie na
konkretny pid z FLAGAMI wartoci 0 jest zaimplementowane
wszdzie. (Perl emuluje wywolanie systemowe, pamitajc wartoci
statusu procesow, ktore zakoczyly si, lecz nie byly odczytane
przez skrypt perla)
wantarray
Zwraca TRUE, jeli kontekst obecnie wykonywanej podprocedury
szuka wartoci listowej. Zwraca FALSE, jeli kontekst szuka
skalara. Zwraca warto niezdefiniowan, jeli kontekst nie szuka
wartoci (void).
return unless defined wantarray; # nie myl o robieniu wicej
my @a = complex_calculation();
return wantarray ? @a : "@a";
warn LIST
Produkuje komunikat na STDERR, podobnie jak die(), lecz nie
wychodzi i nie wyrzuca wyjtku.
Jeli zainstalowany jest handler $SIG{__WARN__), nie s drukowane
adne komunikaty. Od handlera zaley obsluga komunikatu, gdy tak
zadecyduje (np. przekonwertowanie go na die()). Wikszo
handlerow musi wic wywolywa warn() ponownie, aby wywietli
komunikat. Zauwa, e jest to bezpieczne i nie spowoduje
nieskoczonej ptli, gdy haki __WARN__ nie s wolane z niego
samego.
Zachowanie to jest troch inne od tego dla $SIG{__DIE__} (ktore
nie powstrzymywaly tekstu komunikatow, lecz mogly wywola die()
ponownie, aby je zmieni).
Uywanie handlerow __WARN__ daje potne narzdzie do wyciszania
wszystkich ostrzee (nawet tak zwanych obowizkowych). Na
przyklad:
# wywal wszystkie ostrzeenia 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 prosile!
# bez ostrzee czasu kompilacji i czasu dzialania przed tym miejscem
$DOWARN = 1;
# ostrzeenia czasu dzialania s tu wlczone
warn "\$foo is alive and $foo!"; # pojawia si
Zobacz stron perlvar(1) dla szczegolow o ustawianiu wpisow %SIG
i dla przykladow.
write UCHWYTPLIKU
write WYRA
write Zapisuje sformatowany rekord (prawdopodobnie wieloliniowy) do
podanego pliku, uywajc formatu zwizanego z tym plikiem.
Domylnie format dla pliku jest tym, ktory ma t sam nazw, co
uchwyt pliku, lecz mona go zmieni z pomoc funkcji select(),
przypisujc nazw formatu zmiennej $~.
Pocztek przetwarzania formy jest obslugiwany automatycznie:
jeli nie ma miejsca na stronie na sformatowany rekord, to
strona jest przewijana przez wpisanie form feed, nastpnie
uywany jest specjalny format gory-strony (do formatowania
naglowka nowej strony), a potem wpisany jest rekord. Domylnie,
format gory-strony jest nazw uchwytu pliku z dodanym "_TOP",
lecz mona go ustawi dynamicznie, przyznajc zmiennej $^ nazw
podczas gdy wybrany (select) jest uchwyt pliku. Liczba
pozostajcych linii biecej strony znajduje si w zmiennej $- i
moe by ustawiona na 0 aby wymusi now stron.
Jeli UCHWYTPLIKU nie jest podany, wyjcie idzie do biecego
domylnego kanalu wyjcia, ktorym jest pocztkowo STDOUT, a ktory
moe by zmieniony operatorem select. Jeli UCHWYTPLIKU jest
wyraeniem WYRA, to jest ono analizowane, a wynikowy lacuch jest
uywany do podejrzenia nazwy UCHWYTUPLIKU. Dla dalszych
informacji o formatach, zobacz stron perlform(1).
Zauwa, e zapis NIE jest odwrotnoci odczytu. Niestety.
y/// Operator translacji. To samo co tr///. Zobacz stron perlop(1).
INFORMACJE O T/L/LUMACZENIU
Powysze tlumaczenie pochodzi z nieistniejcego ju Projektu Tlumaczenia
Manuali i moe nie by aktualne. W razie zauwaenia ronic midzy powyszym
opisem a rzeczywistym zachowaniem opisywanego programu lub funkcji,
prosimy o zapoznanie si z oryginaln (angielsk) wersj strony podrcznika.