Provided by: manpages-pl_0.7-2_all 

NAZWA
perlfunc - Wbudowane funkcje perla
OPIS
Uwaga! To tłumaczenie może być nieaktualne!
Funkcje z tej sekcji mogą służyć pomocą w wyrażeniach. Podpadają one pod dwie główne kategorie: operatory
list, oraz nazwane operatory jednoargumentowe. [Przyp. tłum.: w perlu nie ma prawdziwych funkcji, są
operatory] Różnią się one w związku priorytetowym przecinkiem. (zobacz tablicę priorytetów na stronie
perlop(1).). Operatory list pobierają więcej niż jeden argument, podczas gdy operatory jednoargumentowe,
z definicji, nigdy nie biorą więcej niż jeden argument. Tak więc przecinek kończy argument operatora
jednoargumentowego, lecz jedynie rozdziela argumenty operatora listy. Ogólnie, operator jednoargumentowy
daje swojemu argumentowi kontekst skalarny, podczas gdy operator listowy może dawać zarówno kontekst
skalarny, jak i listowy. Jeśli daje obydwa, to argumenty skalarne będą najpierw, a za nimi nastąpią
argumenty listowe. (Zauważ, że może istnieć tylko jeden argument listowy.) Np. funkcja splice() ma trzy
argumenty skalarne, za którymi następuje lista.
W opisach składni, które są niżej, operatory list, które oczekują listy (i dają kontekst listowy
elementom tej listy) są pokazywane z argumentem LISTA. Lista taka może składać się z dowolnej kombinacji
argumentów skalarnych lub wartości listowych; wartości listowe będą włączone w listę tak, jakby każdy
pojedynczy element był interpolowany w tym punkcie listy, tworząc dłuższą, jednowymiarową wartość
listową. Elementy typu LISTA powinny być oddzielone przecinkami.
Każda funkcja z poniższej listy, może być użyta bez, albo z nawiasami wokół swoich argumentów. (Opisy
składni pomijają nawiasy.) Jeśli używasz nawiasów, to prosta (lecz czasem zaskakująca) reguła jest taka:
WYGLĄDA jak funkcja, więc JEST funkcją i priorytet nie ma znaczenia. W przeciwnym wypadku jest to
operator listowy lub operator jednoargumentowy i priorytet się liczy. I biała spacja między funkcją i
lewym nawiasem nie liczy się--więc musisz być czasem ostrożny:
print 1+2+4; # Drukuje 7.
print(1+2) + 4; # Drukuje 3.
print (1+2)+4; # Też drukuje 3!
print +(1+2)+4; # Drukuje 7.
print ((1+2)+4); # Drukuje 7.
Jeśli uruchamiasz perla z przełącznikiem -w, to będziesz o tym ostrzegany. Na przykład trzecia z
powyższych linii daje w efekcie:
print (...) interpreted as function at - line 1.
Useless use of integer addition in void context at - line 1.
Dla instrukcji, które mogą być używane zarówno w kontekstach skalarnych, jak i listowych, błąd nie
wymagający przerwania jest ogólnie wskazywany w kontekście skalarnym przez zwrot niezdefiniowanej
wartości, a w kontekście listowym przez zwrot listy null.
Zapamiętaj następującą regułę:
NIE ISTNIEJE OGÓLNA REGUŁA KONWERSJI LISTY W SKALAR!
Każdy operator i funkcja decyduje, jaki rodzaj wartości jest najbardziej odpowiedni do zwrócenia w
kontekście skalarnym. Niektóre operatory zwracają długość listy, która byłaby zwrócona w kontekście
listowym. Niektóre zwracają pierwszą wartość listy. Niektóre zwracają ostatnią wartość listy. Inne
zwracają liczbę pomyślnych operacji. Ogólnie, robią one to, czego chcesz, chyba że oczekujesz spójności.
Funkcje perla według kategorii
Oto funkcje perla (włączając rzeczy, które wyglądają jak funkcje, np. niektóre słowa kluczowe i nazwane
operatory), poukładane według kategorii. Niektóre funkcje pojawiają się w więcej niż jednym miejscu.
Funkcje dla skalarów lub łańcuchów
chomp, chop, chr, crypt, hex, index, lc, lcfirst, length, oct, ord, pack, q/ŁAŃCUCH/, qq/ŁAŃCUCH/,
reverse, rindex, sprintf, substr, tr///, uc, ucfirst, y///
Wyrażenia regularne i porównywanie wzorców
m//, pos, quotemeta, s///, split, study
Funkcje numeryczne
abs, atan2, cos, exp, hex, int, log, oct, rand, sin, sqrt, srand
Funkcje dla prawdziwych tablic (@ARRAYs)
pop, push, shift, splice, unshift
Funkcje dla danych listowych
grep, join, map, qw/ŁAŃCUCH/, reverse, sort, unpack
Funkcje dla %HASHów (tablic asocjacyjnych)
delete, each, exists, keys, values
Funkcje wejścia i wyjścia
binmode, close, closedir, dbmclose, dbmopen, die, eof, fileno, flock, format, getc, print, printf,
read, readdir, rewinddir, seek, seekdir, select, syscall, sysread, sysseek, syswrite, tell, telldir,
truncate, warn, write
Funkcje dla danych o określonej długości lub rekordów
pack, read, syscall, sysread, syswrite, unpack, vec
Funkcje dla deskryptorów plików, plików lub katalogów
-X, chdir, chmod, chown, chroot, fcntl, glob, ioctl, link, lstat, mkdir, open, opendir, readlink,
rename, rmdir, stat, symlink, umask, unlink, utime
Słowa kluczowe związane z kontrolą działania programu
caller, continue, die, do, dump, eval, exit, goto, last, next, redo, return, sub, wantarray
Słowa kluczowe związane z zakresami
caller, import, local, my, package, use
Różne funkcje
defined, dump, eval, formline, local, my, reset, scalar, undef, wantarray
Funkcje dla procesów i grup procesów
alarm, exec, fork, getpgrp, getppid, getpriority, kill, pipe, qx/ŁAŃCUCH/, setpgrp, setpriority,
sleep, system, times, wait, waitpid
Słowa kluczowe związane z modułami perla
do, import, no, package, require, use
Słowa kluczowe związane z klasami i obiektowością
bless, dbmclose, dbmopen, package, ref, tie, tied, untie, use
Niskopoziomowe funkcje gniazd
accept, bind, connect, getpeername, getsockname, getsockopt, listen, recv, send, setsockopt,
shutdown, socket, socketpair
Funkcje komunikacji międzyprocesowej Systemu V
msgctl, msgget, msgrcv, msgsnd, semctl, semget, semop, shmctl, shmget, shmread, shmwrite
Pobieranie informacji użytkownika i grupy
endgrent, endhostent, endnetent, endpwent, getgrent, getgrgid, getgrnam, getlogin, getpwent,
getpwnam, getpwuid, setgrent, setpwent
Pobieranie informacji sieciowej
endprotoent, endservent, gethostbyaddr, gethostbyname, gethostent, getnetbyaddr, getnetbyname,
getnetent, getprotobyname, getprotobynumber, getprotoent, getservbyname, getservbyport, getservent,
sethostent, setnetent, setprotoent, setservent
Funkcje związane z czasem
gmtime, localtime, time, times
Funkcje nowe w perl5
abs, bless, chomp, chr, exists, formline, glob, import, lc, lcfirst, map, my, no, prototype, qx, qw,
readline, readpipe, ref, sub*, sysopen, tie, tied, uc, ucfirst, untie, use
* - sub było słowem kluczowym w perl4, lecz w perl5 jest to operator, który może być używany w
wyrażeniach.
Funkcje przedawnione w perl5
dbmclose, dbmopen
Alfabetyczny listing funkcji perla
-X UCHWYTPLIKU
-X WYRAŻ
-X Test pliku, gdzie X jest jedną z niżej wymienionych liter. Ten jednoargumentowy operator pobiera
argument, nazwę pliku lub jego uchwyt. Następnie testuje plik i sprawdza, czy coś jest w nim
prawdziwe. Jeśli argument zostanie pominięty, testuje $_, nie licząc -t, które testuje STDIN.
Zasadniczo zwraca 1 dla wyniku pozytywnego i '' dla negatywnego, a wartość niezdefiniowaną, jeśli
plik nie istnieje. Mimo śmiesznych nazw, priorytety są takie same jak każdym innym nazwanym
operatorze jednoargumentowym i argument może być otoczony nawiasami. Operator może być jednym z:
-r Plik jest odczytywalny przez efektywny uid/gid.
-w Plik jest zapisywalny przez efektywny uid/gid.
-x Plik jest wykonywalny przez efektywny uid/gid.
-o Właścicielem pliku jest efektywny uid.
-R Plik jest odczytywalny przez rzeczywisty uid/gid.
-W Plik jest zapisywalny przez rzeczywisty uid/gid.
-X Plik jest wykonywalny przez rzeczywisty uid/gid.
-O Właścicielem pliku jest rzeczywisty uid.
-e Plik istnieje.
-z Plik ma rozmiar zerowy.
-s Plik ma rozmiar niezerowy (zwraca rozmiar).
-f Plik jest prostym plikiem.
-d Plik jest katalogiem.
-l Plik jest dowiązaniem symbolicznym.
-p Plik jest nazwanym potokiem (FIFO).
-S Plik jest gniazdem.
-b Plik jest blokowym plikiem specjalnym.
-c Plik jest znakowym plikiem specjalnym.
-t Uchwyt pliku jest otwarty do tty.
-u Plik ma ustawiony bit `setuid'.
-g Plik ma ustawiony bit `setgid'.
-k Plik ma ustawiony bit `sticky'.
-T Plik jest plikiem tekstowym.
-B Plik jest plikiem binarnym (przeciwieństwo -T).
-M Wiek pliku w dniach, gdy uruchomił się skrypt
-A To samo dla czasu dostępu.
-C To samo dla zmiany informacji inode.
Interpretacja operatorów praw pliku -r, -R, -w, -W, -x i -X bazuje jedynie na prawach pliku i
uid/gid użytkownika. Mogą istnieć inne powody, dla których w rzeczywistości nie możesz go
odczytać, zapisać lub uruchomić. Zauważ też, że dla superużytkownika, operatory -r, -R, -w, i -W
zawsze zwracają 1, a -x i -X zwracają 1, jeśli ustawiony jest tak dowolny bit wykonania. Skrypty
uruchamiane przez superużytkownika powinny więc wywoływać do celów testowania praw pliku funkcję
stat() lub tymczasowo zmienić uid na coś innego.
Przykład:
while (<>) {
chop;
next unless -f $_; # ignoruj specjalne
...
}
Zauważ, że -s/a/b/ nie dokonuje zanegowanego podstawienia. Powiedzenie -exp($foo) działa wciąż
zgodnie z oczekiwaniami, jednak jedynie pojedyncze litery za znakiem minusa są interpretowane
jako testy plikowe.
Przełączniki -T i -B działają tak, że testują pierwszy blok pliku w poszukiwaniu dziwnych znaków,
takich jak dziwne kody sterujące, lub znaki z wysokiego zestawu znaków. Jeśli jest ich zbyt wiele
(>30%), to jest to plik -B, w przeciwnym wypadku to plik -T. Dodatkowo, każdy plik, zawierający
w pierwszym bloku null jest uważany za plik binarny. Jeśli -T lub -B jest używane na uchwycie
pliku, to testowany jest bieżący bufor standardowego wejścia zamiast pierwszego bloku. Zarówno
-T jak i -B zwracają odpowiedź pozytywną dla pliku null lub pliku, który jest na EOF podczas
testowania jego uchwytu. Z uwagi na to, że dla testu -T trzeba odczytać plik, w większości
przypadków używa się najpierw -f, jak w next unless -f $file && -T $file.
Jeśli któryś z operatorów testu plików (lub stat() czy lstat()) otrzymałby specjalny uchwyt
pliku, składający się z samego podkreślenia, to użyta zostałaby struktura `stat' z poprzedniego
testu pliku, oszczędzając wywołania systemowego. (Nie działa to dla -t, a ponadto powinieneś
pamiętać, że lstat() i -l zostawiają w strukturze wartości dla dowiązań symbolicznych, a nie
rzeczywistych plików.) Przykład:
print "Can do.\n" if -r $a ⎪⎪ -w _ ⎪⎪ -x _;
stat($filename);
print "Readable\n" if -r _;
print "Writable\n" if -w _;
print "Executable\n" if -x _;
print "Setuid\n" if -u _;
print "Setgid\n" if -g _;
print "Sticky\n" if -k _;
print "Text\n" if -T _;
print "Binary\n" if -B _;
abs WARTOŚĆ
abs Zwraca moduł argumentu. Jeśli parametr WARTOŚĆ zostanie pominięty, to używane jest $_.
accept NOWEGNIAZDO,GNIAZDO
Przyjmuje nadchodzące połączenie na gnieździe, podobnie jak wywołanie systemowe accept(2). Po
sukcesie zwraca spakowany adres, a w razie porażki FALSE. Przykład użycia można znaleźć w sekcji
Sockets: Client/Server Communication strony podręcznika perlipc(1).
alarm SEKUNDY
alarm Powoduje, że sygnał ALARM jest dostarczany do tego procesu po określonej liczbie sekund. Jeśli
nie podano parametru sekund, używana jest wartość zachowana w $_. (Niestety na niektórych
maszynach czas może być do sekundy krótszy niż ten, który podasz, zależnie od sposobu zliczania
sekund.) Naraz odliczać może tylko jeden zegar. Każde wywołanie wyłącza poprzedni zegar, a
argument 0 wyłącza poprzedni zegar bez uruchamiania nowego. Zwrócona wartość jest ilością czasu,
pozostającego poprzedniemu zegarowi.
Dla opóźnień lub większej dokładności niż jedna sekunda, możesz użyć perlowego interfejsu
syscall(), i dostać się do setitimer(2), o ile twój system to obsługuje. W przeciwnym wypadku
obejrzyj opis select(), gdzieś w tym dokumencie. Ogólnie częstym błędem jest łączenie wywołań
alarm() i sleep().
Jeśli chcesz używać alarm() do timeout'owania wywołania systemowego, musisz użyć pary eval/die.
Nie można oczekiwać, że alarm spowoduje, że wywołanie systemowe się zakończy, z $! ustawionym na
EINTR, gdyż na niektórych systemach perl ustawia obsługę sygnałów tak, że wywołania systemowe są
restartowane. Używanie eval/die działa zawsze.
eval {
local $SIG{ALRM} = sub { die "alarm\n" }; # NB \n wymagane
alarm $timeout;
$nread = sysread SOCKET, $buffer, $size;
alarm 0;
};
die if $@ && $@ ne "alarm\n"; # propaguj błędy
if ($@) {
# timeout
}
else {
# bez timeouta
}
atan2 Y,X
Zwraca arcus tangens z Y/X, w zakresie -pi do pi.
Dla operacji tangens, możesz użyć funkcji POSIX::tan(), lub użyć znanej relacji:
sub tan { sin($_[0]) / cos($_[0]) }
bind GNIAZDO,NAZWA
Przywiązuje adres sieciowy do gniazda, podobnie jak wywołanie systemowe bind(2). Po sukcesie
zwraca TRUE, a w przeciwnym wypadku FALSE. NAZWA powinna być spakowanym adresem, typu
odpowiedniego dla gniazda. Zobacz przykłady w sekcji Sockets: Client/Server Communication na
stronie podręcznika perlipc(1).
binmode UCHWYTYPLIKU
Powoduje, że plik przełącza się w tryb binarny zapisu/odczytu. Ma to miejsce w systemach
operacyjnych, które dokonują takiego rozróżnienia. Pliki, które nie są w trybie binarnym,
ukrywają wejściowe sekwencje CR LF pod LF, a sekwencje wyjściowe LF są tłumaczone na CR LF. Tryb
binarny nie wpływa na nic pod Unixem; jednak pod MS-DOS i innymi archaicznymi systemami, może to
być niezbędna właściwość--w przeciwnym wypadku twoja biblioteka C może zniekształcić plik.
Kluczem do rozróżniania systemów, które potrzebują trybu binarnego od tych, które go nie
potrzebują, jest ich format pliku tekstowego. Systemy podobne do Unix i Plan9, oddzielają linie
pojedynczym znakiem i kodują go w C jako '\n'. Nie potrzebują one trybu binarnego. Wszystkie inne
potrzebują. Jeśli UCHWYTPLIKU jest wyrażeniem, to wartość brana jest jako nazwa uchwytu pliku.
bless REF,NAZWAKLASY
bless REF
Funkcja ta mówi rzeczy, wskazywanej przez referencję REF, że jest teraz obiektem w pakiecie
NAZWAKLASY--lub w bieżącym pakiecie, jeśli nie podano parametru nazwy klasy. Funkcja zwraca dla
pewności referencję, gdyż jest ona często ostatnią rzeczą w konstruktorze. Jeśli błogosławiona
funkcja ma być dziedziczona w klasach potomnych, to zawsze używaj wersji dwuargumentowej tej
funkcji. Dla dalszych informacji o błogosławieniu obiektów zobacz stronę perlobj(1).
caller WYRAŻ
caller Zwraca kontekst bieżącego wywołania podprocedury. W kontekście skalarnym, jeśli było wywołanie,
tj. jeśli jesteśmy w podprocedurze lub eval() lub require(), zwraca nazwę pakietu wywołującego, a
w przeciwnym razie wartość niezdefiniowaną. W kontekście listowym, zwraca
($pakiet, $nazwapliku, $linia) = caller;
Z parametrem WYRAŻ zwraca trochę dodatkowych danych, z których korzysta debugger do drukowania
śladu stosu. Wartość WYRAŻ wskazuje, o ile ramek wywołań należy się cofnąć od bieżącej.
($pakiet, $nazwapliku, $linia, $podprocedura,
$maargumenty, $chcetablię, $teksteval, $jest_require) = caller($i);
$podprocedura tutaj może być "(eval)", jeśli ramka nie jest wywołaniem podproceduralnym. W tej
sytuacji ustawiane są dodatkowe elementy, $teksteval i $jest_require: $jest_require jest
prawdziwe, jeśli ramka została utworzona w instrukcji require lub use, $teksteval zawiera tekst
instrukcji eval WYRAŻ. Praktycznie, dla instrukcji eval BLOCK, $nazwapliku to "(eval)", a
$teksteval jest niezdefiniowany. (Zauważ też, że każda instrukcja use tworzy ramkę require.
(wewnątrz ramki eval WYRAŻ)
Co więcej, po wywołaniu z pakietu DB, caller zwraca jeszcze dokładniejsze dane: ustawia zmienną
listową @DB::args na argumenty, z którymi wywołano podprocedurę.
chdir WYRAŻ
Zmienia katalog roboczy na WYRAŻ. Jeśli WYRA jest pominięte, to zmienia katalog na katalog
domowy. Po sukcesie zwraca TRUE, a w przeciwnym wypadku FALSE. Zobacz przykład przy opisie die().
chmod LISTA
Zmienia prawa listy plików. Pierwszy element listy musi być numerycznym zapisem praw, który
powinien być liczbą ósemkową, a który z pewnością nie powinien być łańcuchem cyfr ósemkowych:
0644 jest ok, ale '0644' nie jest. Zwraca liczbę plików, których prawa zmieniono. Jeśli
wszystkim co masz jest łańcuch, zobacz też wpis oct, znajdujący się gdzie indziej w tym
dokumencie.
$cnt = chmod 0755, 'foo', 'bar';
chmod 0755, @executables;
$mode = '0644'; chmod $mode, 'foo'; # ustawia prawa na --w----r-T!
$mode = '0644'; chmod oct($mode), 'foo'; # to jest lepsze
$mode = 0644; chmod $mode, 'foo'; # to jest najlepsze
chomp ZMIENNA
chomp LISTA
chomp Jest to troszkę bezpieczniejsza wersja wpisu chop, opisanego gdzie indziej w tym dokumencie.
Usuwa wszelkie zakończenia linii, które odpowiadają bieżącej wartości $/ (znanego też jako
$INPUT_RECORD_SEPARATOR w module English). Zwraca całkowitą liczbę znaków, usuniętych ze
wszystkich argumentów. Często jest używany do usuwania nowych linii z końca rekordu wejściowego
jeśli obawiasz się, że rekordowi może jej brakować. W trybie `paragraph' ($/ = ""), usuwa
wszystkie kończące znaki nowych linii z łańcuchów. Jeśli pominięta zostanie ZMIENNA, to ucinane
jest $_. Przykład:
while (<>) {
chomp; # zapobiegaj \n na ostatnim polu
@array = split(/:/);
...
}
Możesz w zasadzie uciąć wszystko co jest lwartością, włączając przypisanie:
chomp($cwd = `pwd`);
chomp($answer = <STDIN>);
Jeśli ucinasz listę, obcinany jest każdy element, a zwracana jest lista usuniętych znaków.
chop ZMIENNA
chop LISTA
chop Odrywa ostatni znak łańcucha i zwraca jego wartość. Jest przede wszystkim używany do usuwania
nowej linii z końca rekordu wejściowego, lecz jest dużo bardziej efektywny niż s/\n//, ponieważ
ani nie skanuje, ani nie kopiuje łańcucha. Jeśli pominięto ZMIENNĄ, odrywa $_. Przykład:
while (<>) {
chop; # zapobież \n na ostatnim polu
@array = split(/:/);
...
}
Możesz w zasadzie oderwać cokolwiek, co jest lwartością, włączając przypisanie:
chop($cwd = `pwd`);
chop($answer = <STDIN>);
Jeśli obrywasz listę, obrywany jest każdy element. Zwracana jest tylko wartość ostatniego
oderwania.
Zauważ, że chop zwraca ostatni znak. Aby zwrócić wszystkie poza ostatnim, użyj substr($lancuch,
0, -1).
chown LISTA
Zmienia właściciela (i grupę) listy plików. Pierwsze dwa argumenty listy muszą być NUMERYCZNYMI
uid i gid, podanym w tej kolejności. Zwraca liczbę plików, na których powiodła się zamiana.
$cnt = chown $uid, $gid, 'foo', 'bar';
chown $uid, $gid, @filenames;
Oto przykład, który podgląda nienumeryczne uid'y w pliku z hasłami:
print "User: ";
chop($user = <STDIN>);
print "Files: "
chop($pattern = <STDIN>);
($login,$pass,$uid,$gid) = getpwnam($user)
or die "$user not in passwd file";
@ary = <${pattern}>; # rozwiń nazwy plików
chown $uid, $gid, @ary;
Na większości systemów nie możesz zmieniać właścicielstwa, chyba że jesteś superużytkownikiem,
choć powinieneś być w stanie zmieniać grupę na dowolną z twoich drugorzędnych grup. Na
niezabezpieczonych systemach ograniczenia te mogą być mniejsze, lecz nie jest to przenośne
założenie.
chr LICZBA
chr Zwraca znak, reprezentowany przez LICZBĘ w zbiorze znaków. Na przykład, chr(65) to "A" w ASCII.
Dla odwrócenia tego działania, użyj ord, które jest opisane gdzie indziej w tym dokumencie.
Jeśli pominięto LICZBĘ, to używane jest $_.
chroot NAZWAPLIKU
chroot Funkcja ta działa tak samo jak wywołanie systemowe chroot(2): powoduje, że podany katalog staje
się nowym katalogiem głównym dla wszelkich nowych ścieżek, które będą się zaczynały od "/". Tyczy
się to twojego procesu i jego dzieci. Ze względów bezpieczeństwa, wywołanie to jest zastrzeżone
dla superużytkownika. Jeśli pominięto NAZWĘPLIKU, to używany jest $_.
close UCHWYTPLIKU
Zamyka plik lub potok związany z uchwytem, zwracając TRUE jedynie w wypadku, gdy stdio da radę
opróżnić wszystkie bufory i zamknąć systemowy deskryptor pliku. Jeśli uchwyt pliku pochodził od
otwartego potoku, funkcja zwróci FALSE jeśli któreś z potrzebnych wywołań systemowych zawiedzie
lub jeśli program zakończy pracę z niezerowym statusem. (Jeśli problemem jest fakt, że program
skończył się z niezerowym kodem, to $! będzie ustawione na 0.) Nie musisz zamykać UCHWYTUPLIKU,
jeśli chcesz go zaraz potem wykorzystać do innego otwarcia open(), ponieważ funkcja open()
zamknie go za ciebie. Jednak jawne zamknięcie pliku wejściowego resetuje licznik linii ($.),
podczas gdy niejawne zamknięcie w open() tego nie robi. Poza tym, zamykanie potoku powoduje
oczekiwanie na zakończenie procesu z potoku, na wypadek gdybyś chciał później obejrzeć wyjście
potoku. Jawne zamykanie potoku wstawia wartość statusu komendy do $?. Przykład:
open(OUTPUT, '⎪sort >foo'); # potok do `sort'
... # drukuj różne rzeczy na wyjście
close OUTPUT; # czekaj na zakończenie `sort'
open(INPUT, 'foo'); # pobierz wyniki sortowania
UCHWYTPLIKU może być wyrażeniem, którego wartość daje rzeczywistą nazwę uchwytu pliku.
closedir UCHWYTKATALOGU
Zamyka katalog, otworzony funkcją opendir().
connect GNIAZDO,NAZWA
Próbuje połączyć się ze zdalnym gniazdem, zupełnie tak jak wywołanie systemowe connect(2). Po
sukcesie zwraca TRUE, a w przeciwnym wypadku FALSE. NAZWA powinna być spakowanym typem adresu,
odpowiednim dla gniazda. Zobacz przykłady w sekcji Sockets: Client/Server Communication na
stronie podręcznika perlipc(1).
continue BLOK
W rzeczywistości jest to instrukcja kontroli wykonywania programu, a nie funkcja. Jeśli do BLOKU
dołączone jest continue BLOK (zazwyczaj we while lub foreach), to jest zawsze wykonywany tuż
przed kolejnym wykonaniem warunku, zupełnie jak trzecia część pętli for w C. Tak więc może być
używane do zwiększania zmiennej pętli, nawet gdy pętla była kontynuowana z pomocą instrukcji next
(która jest podobna do instrukcji continue z C).
cos WYRAŻ
Zwraca cosinus z WYRAŻ (wyrażonego w radianach). Jeśli pominie się argument WYRAŻ, to używany
jest $_.
Dla operacji arcus cosinus, możesz użyć funkcji POSIX::acos(), lub następującej relacji:
sub acos { atan2( sqrt(1 - $_[0] * $_[0]), $_[0] ) }
crypt CZYSTYTEKST,SALT
Koduje łańcuch na wzór funkcji crypt(3) z biblioteki C. Może to być użyteczne np. do sprawdzania
plików z hasłami w poszukiwaniu słabych haseł. Robić to powinni tylko ludzie noszący białe
kapelusze.
Zauważ, że crypt jest funkcję jednokierunkową, podobnie jak rozbijanie jajek na omlet. Nie
istnieje (znana) funkcja dekodująca. W wyniku, funkcja wcale nie jest tak użyteczna do
kryptografii. (Dla tego, zobacz najbliższy mirror CPAN.)
Oto przykład, który daje pewność, że ktokolwiek uruchomi ten program, zna swoje własne hasło:
$pwd = (getpwuid($<))[1];
$salt = substr($pwd, 0, 2);
system "stty -echo";
print "Hasło: ";
chop($word = <STDIN>);
print "\n";
system "stty echo";
if (crypt($word, $salt) ne $pwd) {
die "Niezmiernie mi przykro...\n";
} else {
print "ok\n";
}
Oczywiście wpisywanie swojego hasła za każdym razem, gdy ktoś o nie poprosi jest niemądre.
dbmclose HASH
[Funkcja ta jest przedawniona przez funkcję untie().]
Przerywa powiązanie między plikiem DBM a tablicą asocjacyjną.
dbmopen HASH,NAZWADB,PRAWA
[funkcja ta jest przedawniona przez funkcję tie().]
Łączy to plik dbm(3), ndbm(3), sdbm(3), gdbm(), lub Berkeley DB z tablicą asocjacyjną. HASH jest
nazwą tablicy asocjacyjnej. (w przeciwieństwie do normalnego otwierania, pierwszy argument NIE
jest uchwytem pliku, choć wygląda podobnie). NAZWADB jest nazwą bazy danych (bez rozszerzeń w
rodzaju .dir czy .pag). Jeśli baza nie istnieje, to jest tworzona z prawami określanymi przez
PRAWA (zmodyfikowanymi przez umask()). Jeśli twój system obsługuje tylko starsze funkcje DBM, to
możesz w swoim programie wykonać tylko jeden dbmopen(). W starszych wersjach perla, jeśli system
nie miał ani DBM, ani ndbm, wywołanie dbmopen powodowało błąd krytyczny; teraz schodzi do
sdbm(3).
Jeśli nie masz prawa zapisu do pliku DBM, to możesz tylko odczytywać zmienne asocjacyjne, nie
możesz ich ustawiać. Jeśli chcesz spróbować, czy możesz zapisywać, użyj albo testów plikowych,
albo spróbuj ustawić próbny wpis asocjacyjny wewnątrz eval(), co przechwyci błąd.
Zauważ, że funkcje takie, jak keys() i values() mogą zwracać w użyciu z plikami DBM wielkie
tablice. Możesz do iteracji przez wielkie pliki DBM używać także each(). Przykład:
# drukuj offsety pliku historii
dbmopen(%HIST,'/usr/lib/news/history',0666);
while (($key,$val) = each %HIST) {
print $key, ' = ', unpack('L',$val), "\n";
}
dbmclose(%HIST);
Zobacz też stronę podręcznika AnyDBM_File -- jest tam bardziej ogólny opis wad i zalet różnych
podejść dbm. Zobacz też stronę DB_File, dla bogatej implementacji.
defined WYRAŻ
defined Zwraca wartość logiczną, mówiącą czy WYRAŻ ma wartość inną od niezdefiniowanej undef. Jeśli WYRAŻ
nie jest obecne, to testowane jest $_.
Wiele operacji zwraca undef aby wskazać błąd, koniec pliku, błąd systemowy, niezainicjalizowaną
zmienną i inne wyjątki. Funkcja ta pozwala odróżnić undef od innych wartości. (Prosty test
logiczny nie rozróżni undef, zero, pustego łańcucha, i "0", które wszystkie są jednakowo
fałszywe.) Zauważ, że ponieważ undef jest prawidłowym skalarem, to jego obecność niekoniecznie
musi wskazywać warunek wyjątkowy: pop() zwraca undef gdy jego argument jest pustą tablicą, lub
gdy zwracany element jest wartością Wundef.
defined() można używać też do sprawdzania czy podprocedura wychodzi. Z drugiej strony, używanie
defined() na agregatach (tablicach asocjacyjnych i tablicach) nie musi zwrócić zgodnych z
intuicją wyników i powinno się go w tych przypadkach unikać.
Gdy używane na elemencie tablicy asocjacyjnej, mówi czy wartość jest zdefiniowana, a nie czy taki
klucz istnieje w tablicy. Dla tego celu, użyj exists, które jest opisane gdzie indziej w tym
dokumencie.
Przykłady:
print if defined $switch{'D'};
print "$val\n" while defined($val = pop(@ary));
die "Can't readlink $sym: $!"
unless defined($value = readlink $sym);
sub foo { defined &$bar ? &$bar(@_) : die "Brak bar"; }
$debugging = 0 unless defined $debugging;
Uwaga: Wielu ludzi nadużywa defined(), a potem są oni zaskoczeni, że liczba 0 i "" (łańcuch o
długości zero) są w rzeczywistości wartościami zdefiniowanymi. Na przykład, jeśli powiesz
"ab" =~ /a(.*)b/;
to porównanie wzorca się powiedzie i $1 będzie zdefiniowane, niezależnie od tego, że trafiło w
"nic". W rzeczywistości nie można powiedzieć, że trafiło w "nic". Raczej trafiło w coś, o
długości zera znaków. Jest to wszystko bardzo czyste i uczciwe. Gdy funkcja zwraca wartość
niezdefiniowaną, jest to przyznanie się, że nie mogła dać uczciwej odpowiedzi. Tak więc
powinieneś używać defined() tylko jeśli sprawdzasz działanie tego, co próbujesz osiągnąć. W
niektórych wypadkach, rzeczą, której oczekujesz jest proste porównanie z 0 lub "".
Obecnie używanie defined() na całej tablicy lub tablicy asocjacyjnej, zgłasza tylko czy została
dla niego zaalokowana pamięć. Tak więc tablica, którą ustawiasz na pustą listę jest początkowo
niezdefiniowana, a gdy się zapełni, staje się zdefiniowana. Zamiast tego powinieneś użyć prostego
testu rozmiaru:
if (@an_array) { print "ma elementy tablicowe\n" }
if (%a_hash) { print "ma elementy asocjacyjne\n" }
Użycie na nich undef() powoduje wyczyszczenie ich pamięci i zgłoszenie, że nie są już
zdefiniowane. Nie powinno się jednak tego robić, chyba że nie masz zamiaru ich więcej używać,
ponieważ po prostu szybciej jest używać pamięci gotowej do wypełnienia, niż alokować ją od nowa.
Zachowanie defined() na agregatach może zostać zmienione, poprawione, lub zepsute w następnych
wersjach perla.
Zobacz też opisy undef, exists, i ref, znajdujące się w innych miejscach tego dokumentu.
delete WYRAŻ
Kasuje podany klucz(e) i związane z nim wartości z tablicy asocjacyjnej. Dla każdego klucza,
zwracana jest skasowana wartość związana z kluczem albo wartość niezdefiniowana, jeśli taki klucz
nie istniał. Kasowanie z $ENV{} modyfikuje środowisko. Kasowanie z tablicy asocjacyjnej,
podłączonej do pliku DBM, kasuje wpis z pliku. (lecz kasowanie z takiego pliku nie musi zwracać
niczego.)
Następujący przykład kasuje wszystkie wartości tablicy asocjacyjnej:
foreach $key (keys %HASH) {
delete $HASH{$key};
}
Podobnie robi następujące:
delete @HASH{keys %HASH}
(Ale obydwa są wolniejsze niż komenda undef().) Zauważ, że WYRAŻ może być arbitralnie
skomplikowany tak długo, dopóki końcowa operacja jest podejrzeniem elementu asocjacyjnego lub
wycinkiem tablicy asocjacyjnej (`hash slice'):
delete $ref->[$x][$y]{$key};
delete @{$ref->[$x][$y]}{$key1, $key2, @morekeys};
die LISTA
Poza obrębem eval() drukuje wartość LISTY na STDERR i kończy pracę z bieżącą wartością $!
(errno). Jeśli $! wynosi 0, to kończy z wartością ($? >> 8) (status poprzedniej `komendy`).
Jeśli ($? >> 8) jest zerem, to kończy z wartością 255. Wewnątrz eval, komunikat o błędzie jest
pakowany do $@, a eval() jest przerywany wartością niezdefiniowaną; powoduje to, że die() może
podnieść wyjątek.
Równoważne przykłady:
die "Nie mogę przejść do spool: $!\n" unless chdir '/usr/spool/news';
chdir '/usr/spool/news' or die "Nie mogę przejść do spool: $!\n"
Jeśli wartość WYRAŻ nie kończy się nową linią, drukowany jest również numer bieżącej linii
skryptu i wejścia, a za nimi doklejana jest nowa linia. Wskazówka: Czasami dodanie ", stopped"
do twojego komunikatu może nadać mu więcej sensu po doklejeniu łańcucha "at foo line 123".
Załóżmy, że uruchamiasz skrypt "canasta".
die "/etc/games is no good";
die "/etc/games is no good, stopped";
dają w efekcie odpowiednio:
/etc/games is no good at canasta line 123.
/etc/games is no good, stopped at canasta line 123.
Zobacz także exit() i warn().
Można zaaranżować sprawę tak, że callback będzie wywoływany tuż przed uczynieniem swojej
powinności przez die(). Należy w tym celu ustawić hak $SIG{__DIE__}. Związany handler zostanie
wywołany z tekstem błędu i może zmienić treść komunikatu błędu, wywołując die() ponownie. Zobacz
stronę perlvar(1), dla dalszych detali o ustawianiu wpisów %SIG, a także opis eval() dla paru
przykładów.
do BLOK Nie jest to funkcja. Zwraca wartość ostatniej komendy w sekwencji komend, wskazywanych przez
BLOK. Po zmodyfikowaniu przez modyfikator pętli, wywołuje jednokrotnie BLOK przed sprawdzeniem
warunku pętli. (W innych instrukcjach modyfikatory pętli sprawdzają warunek na samym początku.)
do PODPROCEDURA(LISTA)
Niezalecana forma wywołania podprocedury. Zobacz stronę perlsub(1).
do WYRAŻ
Używa wartości WYRAŻ jako nazwy pliku i wykonuje zawartość tego pliku jako skrypt perla.
Podstawowym zadaniem tej instrukcji jest włączanie podprocedur z bibliotek perla.
do 'stat.pl';
jest zupełnie jak
eval `cat stat.pl`;
tylko trochę bardziej efektywne, utrzymuje śledzenie bieżącej nazwy plików dla komunikatów o
błędach i przeszukuje wszystkie katalogi -I, jeśli plik nie znajduje się w katalogu bieżącym
(zobacz także tablicę @INC w sekcji Predefined Names podręcznika perlvar(1)). Jednak jest takie
samo w sensie, że przetwarza (parses) plik za każdym razem, gdy go wywołasz, więc przypuszczalnie
nie chciałbyś tego wewnątrz pętli.
Zauważ, że włączanie modułów bibliotecznych można załatwić lepiej z pomocą operatorów use() i
require(), które również dokonują sprawdzania błędów i powodują wyjątki jeśli jest jakiś problem.
dump ETYKIETA
Powoduje to natychmiastowy zrzut core. Jest to po to, byś mógł użyć programu undump do
konwertowania zrzutu core do pliku binarnego po zainicjalizowaniu wszystkich zmiennych z początku
programu. Po uruchomieniu nowego binarium, rozpocznie się ono od wywołania goto ETYKIETA (ze
wszystkimi ograniczeniami, na które cierpi goto). Myśl o tym, jak o goto z interweniującym
zrzutem core i reinkarnacją. Jeśli ETYKIETA jest pominięta, program restartuje się od początku.
UWAGA: wszelkie pliki, które były otwarte w momencie zrzutu core nie będą otwarte w nowej
inkarnacji programu, powodując przypuszczalnie zamieszanie w części perla. Zobacz też opcję -u ze
strony perlrun(1).
Przykład:
#!/usr/bin/perl
require 'getopt.pl';
require 'stat.pl';
%days = (
'Sun' => 1,
'Mon' => 2,
'Tue' => 3,
'Wed' => 4,
'Thu' => 5,
'Fri' => 6,
'Sat' => 7,
);
dump QUICKSTART if $ARGV[0] eq '-d';
QUICKSTART:
Getopt('f');
each HASH
Po wywołaniu w kontekście listowym, zwraca dwuelementową tablicę, składającą się z klucza i
wartości następnego elementu asocjacyjnego, tak że możesz iterować poprzez tablicę. Po wywołaniu
w kontekście skalarnym, zwraca tylko klucz dla następnego elementu asocjacyjnego. (Uwaga: Klucze
mogą mieć wartość "0" lub "", co jest logicznie nieprawidłowe; możesz w tym celu chcieć zapobiec
konstrukcjom jak while ($k = each %foo) {} .)
Wpisy są zwracane w kolejności dość losowej. Gdy tablica asocjacyjna jest całkowicie odczytana, w
kontekście listowym zwracana jest tablica null (co po przypisaniu daje wartość FALSE (0)), a w
kontekście skalarnym zwracany jest undef. Następne wywołanie each() po tym rozpocznie iterowanie
od nowa. Dla każdej tablicy asocjacyjnej istnieje pojedynczy iterator, dzielony przez funkcje
each(), keys() i values(); może być zresetowany przez odczytanie wszystkich elementów tablicy lub
przez wywołanie keys HASH lub values HASH. Jeśli dodajesz, lub kasujesz elementy tablicy
asocjacyjnej podczas jej iterowania, to może się zdarzyć, że niektóre wpisy utracisz, a niektóre
dostaniesz zduplikowane. Nie rób więc tego.
Następujący przykład drukuje środowisko, podobnie jak program printenv(1), lecz w odwrotnej
kolejności:
while (($key,$value) = each %ENV) {
print "$key=$value\n";
}
Zobacz też keys() i values().
eof UCHWYTPLIKU
eof ()
eof Zwraca 1, jeśli następny odczyt z UCHWYTUPLIKU zwróci koniec pliku (eof) lub jeśli UCHWYTPLIKU
nie jest otwarty. UCHWYTPLIKU może być wyrażeniem, którego wartość daje prawdziwą nazwę uchwytu
pliku. (Zauważ, że ta funkcja w rzeczywistości odczytuje znak, a potem wstawia go z powrotem,
więc nie jest zbyt użyteczna w kontekście interaktywnym.) Nie czytaj z pliku terminalowego (lub
nie wołaj eof(UCHWYTPLIKU)) po osiągnięciu końca pliku. Pliki takie, jak terminale mogą po takim
zabiegu utracić warunek końca pliku.
eof bez argumentów, używa jako argumentu ostatniego odczytu pliku. Puste nawiasy () mogą
wskazywać na pseudo plik, złożony z plików, wymienionych w linii komend, np. eof() dobrze jest
używać wewnątrz pętli while (<>), aby wykryć koniec ostatniego pliku. Przykłady:
# resetuj numerowanie linii dla każdego pliku wejściowego
while (<>) {
print "$.\t$_";
close(ARGV) if (eof); # Nie eof().
}
# wstaw kreski przed ostatnią linią ostatniego pliku
while (<>) {
if (eof()) {
print "--------------\n";
close(ARGV); # close or break; is needed if we
# are reading from the terminal
}
print;
}
Wskazówka praktyczna: w perlu prawie nigdy nie trzeba używać eof, ponieważ operatory wejściowe
zwracają undef gdy nie będą miały więcej danych.
eval WYRAŻ
eval BLOK
WYRAŻ jest przetwarzany i wykonywany tak, jakby był maleńkim programem perla. Jest wywoływany w
kontekście bieżącego programu perla, więc wszelkie ustawienia zmiennych lub definicje podprocedur
i formatów zostają dalej. Zwracana wartość jest wartością ostatniego wykonanego wyrażenia, lub
wartością, przekazaną przez return, czyli tak jak w podprocedurach. Ostatnie wyrażenie jest
wykonywane w kontekście skalarnym, lub tablicowym, zależnie od kontekstu eval.
Jeśli pojawi się błąd składni lub błąd czasu działania albo jeśli wykonana zostanie instrukcja
die(), to zwrócona zostanie wartość niezdefiniowana, a $@ zostanie ustawione na komunikat o
błędzie. Jeśli nie było błędu, $@ będzie łańcuchem null. Jeśli WYRAŻ zostanie pominięte, to
wykonywane jest $_. Ostatni średnik, jeśli taki istnieje, może być pominięty w wyrażeniu.
Ostrzegam jednak, że używanie eval() nie wycisza perla od drukowania ostrzeżeń na STDERR, ani
nie upycha tekstu tych komunikatów do $@. Aby zrobić którąś z tych rzeczy, musisz użyć
zabudowania $SIG{__WARN__}. Zobacz warn() i stronę perlvar(1).
Zauważ, że ponieważ eval() przechwytuje krytyczne (w innych wypadkach) błędy, to jest przydatny
dla określania czy konkretna właściwość (taka, jak np. socket(), symlink(), itp. jest
zaimplementowana. Jest to również mechanizm perla obsługiwania wyjątków, gdzie operator die jest
mechanizmem ich podnoszenia.
Jeśli wykonywany kod się nie różni, możesz użyć postaci eval-BLOK do wychwytywania błędów czasu
działania, bez potrzeby rekompilacji za każdym razem. Błąd, jeśli się pojawi, jest wciąż zwracany
w $@. Przykłady:
# spowoduj, by dzielenie przez zero nie było krytyczne
eval { $answer = $a / $b; }; warn $@ if $@;
# to samo, mniej efektywnie
eval '$answer = $a / $b'; warn $@ if $@;
# błąd czasu kompilacji
eval { $answer = };
# błąd czasu działania
eval '$answer ='; # ustawia $@
Używając postaci eval{} jako pułapki na wyjątki w bibliotekach, możesz nie życzyć sobie
uruchamiania haków __DIE__, które mógł sobie ustawić użytkownik. Dla tego celu można wykorzystać
konstrukcję local $SIG{__DIE__}. Przykład:
# bardzo prywatna pułapka na wyjątek dzielenia przez zero
eval { local $SIG{'__DIE__'}; $answer = $a / $b; }; warn $@ if $@;
Jest to szczególnie istotne, gdyż haki __DIE__ mogą wywoływać die() ponownie, co ma efekt
zmieniania komunikatów o błędach:
# haki __DIE__ mogą modyfikować komunikaty o błędach
{
local $SIG{'__DIE__'} = sub { (my $x = $_[0]) =~ s/foo/bar/g; die $x };
eval { die "foo foofs here" };
print $@ if $@; # drukuje "bar barfs here"
}
Używając eval(), powinieneś szczególnie uważać, by pamiętać na co się patrzy gdy:
eval $x; # PRZYPADEK 1
eval "$x"; # PRZYPADEK 2
eval '$x'; # PRZYPADEK 3
eval { $x }; # PRZYPADEK 4
eval "\$$x++" # PRZYPADEK 5
$$x++; # PRZYPADEK 6
Przypadki 1 i 2 zachowują się jednakowo: uruchamiają kod, zawarty w zmiennej $x. (Chociaż
przypadek 2 ma ogłupiające cudzysłowy, powodujące, że czytelnik zastanawia się, co jeszcze może
się zdarzyć (nic nie może).) Przypadki 3 i 4 zachowują się podobnie: wykonują one kod '$x',
który nie robi nic poza zwróceniem wartości $x. (Przypadek 4 jest preferowany ze względów
estetycznych, ma też zaletę kompilowania podczas kompilacji, a nie podczas działania.) Przypadek
5 jest miejscem, gdzie normalnie chciałbyś użyć cudzysłowów, poza tym, że w tej konkretnej
sytuacji można użyć po prostu symbolicznych referencji. Jest tak w przypadku 6.
exec LISTA
Funkcja exec() wykonuje komendę systemową i NIGDY NIE POWRACA, chyba że komenda nie istnieje i
jest wykonywana bezpośrednio, zamiast przez /bin/sh -c (patrz niżej). Jeśli chcesz powrócić,
użyj zamiast exec() instrukcji system().
Jeśli w LIŚCIE jest więcej niż jeden argument, lub jeśli jest to tablica z więcej niż jedną
wartością, wywoływany jest execvp(3) (z argumentami z LISTY). Jeśli jest tylko jeden argument
skalarny, to jest on sprawdzany w poszukiwaniu metaznaków powłoki. Jeśli są tam jakieś znaki, to
cały argument jest przekazywany do przetworzenia przez /bin/sh -c. Jeśli nie ma żadnych
metaznaków, to argument jest dzielony na słowa i przekazywany bezpośrednio do execvp(3), co jest
bardziej efektywne. Uwaga: exec() i system() nie opróżniają twojego bufora wejściowego, więc
możliwe, że aby zapobiec utracie wyjścia, będziesz musiał ustawić $⎪. Przykłady:
exec '/bin/echo', 'Twoimi argumentami są: ', @ARGV;
exec "sort $outfile ⎪ uniq";
Jeśli tak naprawdę nie potrzebujesz wywołać pierwszego argumentu, lecz chcesz oszukać program,
który wykonujesz co do jego nazwy, to możesz podać program, który chcesz wywołać jako "obiekt
niebezpośredni" (bez przecinka) na samym początku LISTY. (Wymusza to zawsze interpretację LISTY
jako listy wielowartościowej, nawet jeśli jest tam tylko pojedynczy skalar.) Przykład:
$shell = '/bin/csh';
exec $shell '-sh'; # udaj, że to powłoka loginowa
lub, bardziej bezpośrednio,
exec {'/bin/csh'} '-sh'; # udaj, że to powłoka loginowy
exists WYRAŻ
Zwraca TRUE, jeśli podany klucz asocjacyjny istnieje w tablicy asocjacyjnej. Wartość jest
prawdziwa nawet gdy odpowiadająca kluczowi wartość jest niezdefiniowana.
print "Istnieje\n" if exists $array{$key};
print "Zdefiniowany\n" if defined $array{$key};
print "Prawdziwy\n" if $array{$key};
Element asocjacyjny może być prawdziwy tylko wtedy, gdy jest zdefiniowany, a zdefiniowany jeśli
istnieje, lecz odwrotna kolejność niekoniecznie jest prawdziwa.
Zauważ, że WYRAŻ może być skomplikowany tak daleko, dopóki ostateczna operacja jest podejrzeniem
klucza asocjacyjnego:
if (exists $ref->[$x][$y]{$key}) { ... }
exit WYRAŻ
Wykonuje WYRAŻ i kończy pracę z tą wartością. (W rzeczywistości, wywołuje najpierw zdefiniowane
procedury END, lecz procedury te mogą przerwać kończenie. Podobnie, również przed wyjściem wołane
są wszelkie destruktory obiektów.) Przykład:
$ans = <STDIN>;
exit 0 if $ans =~ /^[Xx]/;
Zobacz też die(). Jeśli WYRAŻ jest pominięte, to praca kończy się statusem 0. Jedynymi,
uniwersalnymi i przenośnymi wartościami WYRAŻ są 0 dla sukcesu i 1 dla błędu; wszelkie inne są
podstawą do dziwnych interpretacji, zależnych od środowiska, w którym program jest uruchomiony.
Nie powinieneś używać exit() do przerywania podprocedury, jeśli istnieje szansa, że ktoś mógłby
chcieć ustawić pułapkę na błąd. Zamiast tego użyj die(), który może być przechwycony przez
eval().
exp WYRAŻ
exp Zwraca e (naturalna podstawa logarytmu) do potęgi WYRAŻ. Jeśli WYRAŻ jest pominięte, zwraca
exp($_).
fcntl UCHWYTPLIKU,FUNKCJA,SKALAR
Implementuje funkcję fcntl(2). Przypuszczalnie będziesz musiał zaznaczyć
use Fcntl;
aby móc się nią posługiwać. Przetwarzanie argumentów i zwracanie wartości działa zupełnie jak w
ioctl(), opisanym niżej. Zauważ, że fcntl() da błąd krytyczny po użyciu na maszynie, nie
implementującej fcntl(2). Na przykład:
use Fcntl;
fcntl($filehandle, F_GETLK, $packed_return_buffer);
fileno UCHWYTPLIKU
Zwraca deskryptor pliku dla uchwytu pliku. Jest to przydatne dla konstruowania bitmap dla
select(). Jeśli UCHWYTPLIKU jest wyrażeniem, to jego wartość brana jest za nazwę uchwytu pliku.
flock UCHWYTPLIKU,OPERACJA
Wywołuje flock(2), lub emuluje go dla uchwytu UCHWYTPLIKU. Zwraca TRUE po sukcesie, FALSE w
wypadku jakiegoś problemu. Na maszynach nie implementujących blokowania flock(2), fcntl(2), lub
lockf(3), powoduje błąd krytyczny. flock() jest przenośnym perlowym interfejsem blokowania
plików, choć blokuje tylko całe pliki, a nie rekordy.
OPERACJA jest jedną z LOCK_SH, LOCK_EX, lub LOCK_UN. Możliwa jest jeszcze kombinacja z LOCK_NB.
Stałe te mają tradycyjne wartości 1, 2, 8 i 4, lecz możesz używać nazw symbolicznych po
zaimportowaniu ich z modułu Fcntl, robiąc to albo pojedynczo, albo grupowo, używając tagu
':flock' . LOCK_SH żąda blokady dzielonej, LOCK_EX żąda blokady na wyłączność, a LOCK_UN zwalnia
poprzednio zażądaną blokadę. Jeśli do LOCK_SH lub LOCK_EX dodany zostanie LOCK_NB, to flock nie
będzie blokował, oczekując na zablokowanie, lecz zakończy działanie natychmiast (aby dowiedzieć
się, czy uzyskałeś blokadę, sprawdź status wyjścia).
Aby zapobiec prawdopodobnie dekoordynacji, perl opróżnia UCHWYTPLIKU przed jego (od)blokowaniem.
Zauważ, że emulacja zbudowana za pomocą lockf(3) nie daje blokad dzielonych i wymaga, by
UCHWYTPLIKU był otwarty z zamiarem zapisu. Jest to semantyka, którą implementuje lockf(3).
Większość (wszystkie?) systemów jednak implementuje lockf(3) na zasadach blokowania fcntl(2),
więcej różnice nie powinny się dawać we znaki.
Zauważ też, że niektóre wersje flock() nie mogą blokować rzeczy poprzez sieć; będziesz musiał
użyć do tego bardziej specyficznego dla systemu fcntl(). Jeśli chcesz, możesz zmusić perla do
ignorowania systemowej funkcji flock(2) i używać jego własnej, opartej o fcntl(2) emulacji. Robi
się to, podając programowi Configure przełącznik -Ud_flock. Trzeba to oczywiście zrobić podczas
konfigurowania perla jako takiego.
Oto doklejacz mailboxa dla systemów BSD.
use Fcntl ':flock'; # importuj stałe LOCK_*
sub lock {
flock(MBOX,LOCK_EX);
# a w wypadku, gdyby ktoś dokleił
# podczas naszego oczekiwania...
seek(MBOX, 0, 2);
}
sub unlock {
flock(MBOX,LOCK_UN);
}
open(MBOX, ">>/usr/spool/mail/$ENV{'USER'}")
or die "Nie mogę otworzyć mailboxa!: $!";
lock();
print MBOX $msg,"\n\n";
unlock();
Zobacz też stronę podręcznika. Są tam inne przykłady flock().
fork Wykonuje wywołanie systemowe fork(2). Zwraca procesowi rodzicielskiemu pid dziecka, a w wątku
dziecka zwraca zero. W wypadku błędu, zwraca undef. Uwaga: nieopróżnione bufory pozostają
nieopróżnione w obydwu procesach, co znaczy, że będziesz musiał ustawić $⎪ ($AUTOFLUSH w English)
lub wywołać metodę autoflush() z IO::Handle aby zapobiec duplikacji wyjścia.
Jeśli fork()'ujesz bez czekania na dzieci, zbierzesz zombies. (Osierocone procesy.)
$SIG{CHLD} = sub { wait };
Istnieje też trik podwójnego forka (sprawdzanie błędów forka zostało pominięte);
unless ($pid = fork) {
unless (fork) {
exec "co naprawdę chcesz robić";
die "bez exec";
# ... or ...
## (jakiś_kod_perla)
exit 0;
}
exit 0;
}
waitpid($pid,0);
Zobacz też stronę podręcznika perlipc(1). Są tam dalsze przykłady forkowania i zbierania
konających dzieci.
Zauważ, że jeśli twoje forkowane dziecko dziedziczy systemowe deskryptory plików, takie jak STDIN
i STDOUT, które w rzeczywistości są połączone potokiem lub gniazdem, to jeśli skończysz
działanie, zdalny serwer (taki jak httpd, rsh) nie będzie myślał, że rzeczywiście skończyłeś.
Powinieneś je otworzyć na nowo na /dev/null.
format Zadeklaruj format obrazka, używanego z funkcją write(). Na przykład:
format Something =
Test: @<<<<<<<< @⎪⎪⎪⎪⎪ @>>>>>
$str, $%, '$' . int($num)
.
$str = "widget";
$num = $cost/$quantity;
$~ = 'Something';
write;
Dla dalszych opisów i przykładów, zobacz stronę perlform(1).
formline OBRAZEK,LISTA
Jest to funkcja wewnętrzna, używana przez formaty. Można ją jednak wywołać też samodzielnie.
Formatuje ona (zobacz stronę perlform(1)) listę wartości zależnie od zawartości OBRAZKA,
umieszczając wyjście w akumulatorze wyjścia formatowego, $^A ($ACCUMULATOR w English).
Ostatecznie, po dokonaniu write(), zawartość $^A jest zapisywana do jakiegoś uchwytu pliku.
Możesz jednak odczytać go samodzielnie i ustawić na "". Zauważ, że format zazwyczaj wykonuje
jeden formline() na każdą linię formy, lecz sama funkcja fromline nie zwraca uwagi na to, ile
nowych linii jest osadzonych w OBRAZKU. Znaczy to, że tokeny ~ i ~~ będą traktować cały OBRAZEK
jako linię pojedynczą. Możesz więc być zmuszonym do używania wielu linii form, aby
zaimplementować pojedynczy format zapisu, podobnie jak kompilator format.
Uważaj, jeśli wstawiasz wokół obrazka podwójne cudzysłowy--znak "@" może być wzięty za początek
nazwy tablicy. formline() zawsze zwraca TRUE. Zobacz stronę perlform(1) dla dalszych przykładów.
getc UCHWYTPLIKU
getc Zwraca następny znak z pliku wejściowego, identyfikowanego przez UCHWYTPLIKU. Na końcu pliku
zwraca łańcuch null. Jeśli UCHWYTPLIKU zostanie pominięty, odczyt następuje ze STDIN. Nie jest
to efektywne. Nie może być używane do pobierania niebuforowanych pojedynczych znaków. Do tego
celu spróbuj raczej czegoś w rodzaju:
if ($BSD_STYLE) {
system "stty cbreak </dev/tty >/dev/tty 2>&1";
}
else {
system "stty", '-icanon', 'eol', "\001";
}
$key = getc(STDIN);
if ($BSD_STYLE) {
system "stty -cbreak </dev/tty >/dev/tty 2>&1";
}
else {
system "stty", 'icanon', 'eol', '^@'; # ASCII null
}
print "\n";
Określenie, czy $BSD_STYLE powinno być ustawione, pozostawiamy jako ćwiczenie dla czytelnika.
Na systemach, kompatybilnych z POSIX, bardziej przenośna do tego celu może być funkcja
POSIX::getattr(). Zobacz też moduł Term::ReadKey z najbliższego mirrora CPAN; szczegóły o CPAN
można znaleźć we wpisie CPAN ze strony podręcznika perlmod(1).
getlogin
Zwraca bieżący login z /etc/utmp. (o ile istnieje.) W wypadku nulla, użyj getpwuid().
$login = getlogin ⎪⎪ getpwuid($<) ⎪⎪ "Kilroy";
Nie wykorzystuj getlogin() do autentykacji: nie jest tak bezpieczny jak getpwuid().
getpeername GNIZADO
Zwraca spakowany adres sockaddr drugiego końca z połączenia na GNIEŹDZIE.
use Socket;
$hersockaddr = getpeername(SOCK);
($port, $iaddr) = unpack_sockaddr_in($hersockaddr);
$herhostname = gethostbyaddr($iaddr, AF_INET);
$herstraddr = inet_ntoa($iaddr);
getpgrp PID
Zwraca bieżącą grupę procesu dla podanego PIDa. Aby uzyskać grupę bieżącego procesu, użyj
wartości PID równej zero. Użycie tej funkcji na maszynie, nie implementującej getpgrp(2)
podniesie wyjątek. Jeśli parametr PID zostanie pominięty, to zwracana jest grupa bieżącego
procesu. Zauważ, że wersja POSIX getpgrp nie przyjmuje argumentu PID, więc naprawdę przenośna
jest tylko konstrukcja PID==0.
getppid Zwraca identyfikator procesu rodzicielskiego.
getpriority CZYJE,KTO
Zwraca bieżący priorytet procesu, grupy procesów, lub użytkownika. (Zobacz stronę podręcznika
getpriority(2).) Użycie tej funkcji na maszynie nie implementującej getpriority(2) podniesie
wyjątek krytyczny.
getpwnam NAZWA
getgrnam NAZWA
gethostbyname NAZWA
getnetbyname NAZWA
getprotobyname NAZWA
getpwuid UID
getgrgid GID
getservbyname NAZWA,PROTO
gethostbyaddr ADR,TYPADRESU
getnetbyaddr ADR,TYPADRESU
getprotobynumber LICZBA
getservbyport PORT,PROTO
getpwent
getgrent
gethostent
getnetent
getprotoent
getservent
setpwent
setgrent
sethostent STAYOPEN
setnetent STAYOPEN
setprotoent STAYOPEN
setservent STAYOPEN
endpwent
endgrent
endhostent
endnetent
endprotoent
endservent
Funkcje te dokonują tych samych akcji, co ich odpowiedniki z biblioteki systemowej. W kontekście
listowym, wartości zwracane różnych funkcji `get' są następujące:
($nazwa,$hasło,$uid,$gid,
$quota,$komentarz,$gcos,$katalog,$shell) = getpw*
($nazwa,$hasło,$gid,$członkowie) = getgr*
($nazwa,$aliasy,$typadresu,$długość,@addrs) = gethost*
($nazwa,$aliasy,$typadresu,$sieć) = getnet*
($nazwa,$aliasy,$protokół) = getproto*
($nazwa,$aliasy,$port,$protokół) = getserv*
(Jeśli wpis nie istnieje, dostaniesz listę null.)
W kontekście skalarnym, dostajesz nazwę. Wyjątkiem jest funkcja podglądania według nazwy, gdzie
dostajesz inną rzecz, jaką by ona nie była. (Jeśli wpis nie istnieje, otrzymujesz wartość
niezdefiniowaną.) Na przykład:
$uid = getpwnam
$nazwa = getpwuid
$nazwa = getpwent
$gid = getgrnam
$nazwa = getgrgid
$nazwa = getgrent
itd.
Wartość $członkowie, zwracana przez getgr*() to oddzielona spacjami lista nazw loginowych
członków grupy.
Jeśli w C obsługiwana jest zmienna errno, to dla funkcji gethost*() jego wartość będzie
przekazywana przez $?. Wartość @addrs, zwracana przez wykonane wywołanie, jest listą czystych
(raw) adresów, zwróconych przez odpowiednie wywołanie systemowe. W domenie internetowej, każdy
adres jest czterobajtowy, a rozpakować go możesz, mówiąc coś w rodzaju:
($a,$b,$c,$d) = unpack('C4',$addr[0]);
getsockname GNIAZDO
Zwraca spakowany adres sockaddr tego końca połączenia na GNIEŹDZIE.
use Socket;
$mysockaddr = getsockname(SOCK);
($port, $myaddr) = unpack_sockaddr_in($mysockaddr);
getsockopt GNIAZDO,POZIOM,NAZWAOPCJI
Zwraca zażądaną opcję gniazda, lub wartość niezdefiniowaną w wypadku błędu.
glob WYRAŻ
glob Zwraca wartość WYRAŻ z rozwinięciami nazwy plików, takimi jakich dokonałaby powłoka. Funkcja ta
jest wewnętrzną funkcją implementującą operator <*.c>, lecz możesz jej użyć bezpośrednio. Jeśli
pominięte zostanie WYRAŻ, to używane będzie $_. Operator <*.c> jest omówiony bliżej w sekcji I/O
Operators na stronie perlop(1).
gmtime WYRAŻ
Konwertuje czas zwrócony przez funkcję time do 9 elementowej tablicy, w której znajduje się czas
zlokalizowany do standardowej strefy Greenwich. Zazwyczaj jest to używane następująco:
# 0 1 2 3 4 5 6 7 8
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) =
gmtime(time);
Wszystkie elementy tablicy są numeryczne i pochodzą wprost ze struktury tm. Ogólnie znaczy to,
że $mon ma zakres 0..11, a $wday 0..6, z niedzielą kryjącą się pod 0. Dodatkowo, $year jest
liczbą lat od 1900, a nie po prostu dwiema ostatnimi cyframi roku.
Jeśli WYRAŻ jest pominięte, wykonuje gmtime(time()).
W kontekście skalarnym, zwraca wartość ctime(3):
$now_string = gmtime; # np. "Thu Oct 13 04:54:34 1994"
Zobacz też funkcję timegm(), udostępnianą przez moduł Time::Local, a także funkcję strftime(3),
dostępną przez moduł POSIX.
goto ETYKIETA
goto WYRAŻ
goto &NAZWA
Postać goto-ETYKIETA szuka instrukcji, oznaczonej przez ETYKIETA i kontynuuje działanie od
tamtego miejsca. Nie może być używane do przechodzenia do konstrukcji, wymagającej inicjalizacji,
takiej jak podprocedura czy pętla foreach. Nie może też być używane do przechodzenia do
konstrukcji optymalizowanej, lub do wychodzenia z bloku, lub podprocedury, przekazanej do sort().
Można nim natomiast przeskoczyć prawie we wszystkie inne miejsca zakresu dynamicznego, włączając
wychodzenie z podprocedur, choć w tym wypadku lepiej użyć innej konstrukcji, takiej jak last lub
die. Autor perla nigdy nie czuł potrzeby używania tej postaci goto (tzn. w perlu--C jest inną
sprawą).
Postać goto-WYRAŻ oczekuje nazwy etykiety, której zakres może być rozwiązany dynamicznie. Pozwala
to na obliczane goto per FORTRAN, lecz nie jest zbyt zalecane, jeśli optymalizujesz ze względu na
łatwość konserwacji programu:
goto ("FOO", "BAR", "GLARCH")[$i];
Postać goto-&NAZWA jest bardzo magiczna i podmienia wywołanie do nazwanej podprocedury dla
bieżącej procedury. Jest to używane przez podprocedury AUTOLOAD, które chcą ładować inne
podprocedury, a potem udawać, że ta inna podprocedura została wywołana jako pierwsza (poza tym,
wszelkie zmiany @_ bieżącej podprocedury są przekazywane innej podprocedurze.) Po tym goto, nawet
caller() nie będzie w stanie powiedzieć, że ta procedura była wywołana pierwsza.
grep BLOK LISTA
grep WYRAŻ,LISTA
Jest to podobne duchowo, lecz nie identyczne do grep(1) i krewnych. W rzeczywistości, nie jest
ograniczone do używania wyrażeń regularnych.
Wykonuje BLOK lub WYRAŻ dla każdego elementu LISTY (ustawiając lokalnie $_ na każdy element) i
zwracając listę wartości, składających się z tych, dla których wykonane wyrażenie było prawdziwe.
W kontekście skalarnym, zwraca liczbę prawdziwych wyrażeń.
@foo = grep(!/^#/, @bar); # Pozbądź się komentarzy
lub równoważnie,
@foo = grep {!/^#/} @bar; # pozbądź się komentarzy
Zauważ, że skoro $_ jest referencją do wartości listy, może być używane do modyfikowania
elementów tablicy. Podczas gdy jest to przydatne i obsługiwane, może to spowodować też
nieoczekiwane rezultaty, szczególnie w wypadku gdy LISTA nie jest nazwaną tablicą.
Grep zwraca aliasy do oryginalnej listy. Znaczy to, że modyfikowanie elementu listy zwróconej
przez to polecenie, modyfikuje też element listy oryginalnej.
hex WYRAŻ
hex Interpretuje WYRAŻ jako łańcuch szesnastkowy i zwraca odpowiadającą mu wartość. (Dla konwersji
łańcuchów, które mogą się zaczynać od 0, lub 0x, zobacz opis oct, znajdujący się gdzieś w tym
dokumencie.) Jeśli WYRAŻ zostanie pominięte, to używane jest $_.
print hex '0xAf'; # drukuje '175'
print hex 'aF'; # to samo
import Nie istnieje wbudowana funkcja import. Jest to zwyczajna metoda (podprocedura), definiowana
(dziedziczona) przez moduły, które życzą sobie eksportować nazwy do kolejnych modułów. [potem]
funkcja use() woła metodę import() dla używanego pakietu. Zobacz jeszcze opis use() i stronę
perlmod(1) oraz stronę Exporter.
index STR,SUBSTR,POZYCJA
index STR,SUBSTR
Zwraca pozycję pierwszego pojawienia się SUBSTR w łańcuchu STR. Jeśli POZYCJA jest pominięta, to
przeszukiwanie rozpoczyna się od początku łańcucha. Wartość zwracana jest oparta o 0 (lub tego,
na co ustawisz zmienną $[ --lecz lepiej tego nie rób). Jeśli podciąg nie może zostać
zlokalizowany, zwracana jest podstawa - 1, czyli normalnie -1.
int WYRAŻ
int Zwraca część całkowitą z WYRAŻ. Jeśli WYRAŻ jest pominięte, używane jest $_.
ioctl UCHWYTPLIKU,FUNKCJA,SKALAR
Implementuje funkcję ioctl(2). Przypuszczalnie aby jej używać, będziesz musiał powiedzieć
require "ioctl.ph"; # przypuszczalnie w /usr/local/lib/perl/ioctl.ph
Jeśli ioctl.ph nie istnieje, lub nie ma właściwych definicji, będziesz musiał użyć swojej
własnej, opartej na nagłówkach C, takich jak <sys/ioctl.h>. (Istnieje skrypt perla o nazwie
h2ph(1), która pomaga w konwersji, lecz jest to nietrywialna sprawa.) SKALAR jest wartością
zapisywaną, lub odczytywaną, zależnie od FUNKCJI--wskaźnik do wartości łańcuchowej SKALARA będzie
przekazany jako trzeci argument właściwego wywołania ioctl. (Jeśli SKALAR nie ma wartości
łańcuchowej, lecz ma numeryczną, to zostanie przekazana ta wartość zamiast wskaźnika do łańcucha.
Aby zapewnić, że będzie to prawdziwe, przed użyciem dodaj do skalara 0). Do manipulowania na
wartościach struktur, używanych przez ioctl() przydatne są funkcje pack() i unpack().
Następujący przykład ustawia znak kasowania na DEL.
require 'ioctl.ph';
$getp = &TIOCGETP;
die "NO TIOCGETP" if $@ ⎪⎪ !$getp;
$sgttyb_t = "ccccs"; # 4 znaki i short
if (ioctl(STDIN,$getp,$sgttyb)) {
@ary = unpack($sgttyb_t,$sgttyb);
$ary[2] = 127;
$sgttyb = pack($sgttyb_t,@ary);
ioctl(STDIN,&TIOCSETP,$sgttyb)
⎪⎪ die "Nie mogę wykonać ioctl: $!";
}
Wartość zwracana ioctl (i fcntl) jest następująca:
gdy OS zwraca: to Perl zwraca:
-1 wartość niezdefiniowaną
0 łańcuch "0 but true"
coś innego to samo
Tak więc, mimo że perl zwraca po sukcesie TRUE, a w wypadku niepowodzenia FALSE, możesz łatwo
określić rzeczywistą wartość zwróconą przez system operacyjny:
($retval = ioctl(...)) ⎪⎪ ($retval = -1);
printf "System zwrócił %d\n", $retval;
join WYRAŻ,LISTA
Łączy osobne łańcuchy LISTY w pojedynczy łańcuch, w którym pola są rozdzielone wartościami WYRAŻ.
Zwraca ten łańcuch. Przykład:
$_ = join(':', $login,$passwd,$uid,$gid,$gcos,$home,$shell);
Zobacz też opis split.
keys HASH
Zwraca normalna tablicę, składającą się z wszystkich kluczy nazwanej tablicy asocjacyjnej. (W
kontekście skalarnym, zwraca liczbę kluczy.) Klucze są zwracane w dość losowej kolejności, lecz w
tej samej, w której swoje wartości produkują funkcje values() i each() (o ile tablica asocjacyjna
nie była [w międzyczasie] zmieniana). W efekcie ubocznym, funkcja resetuje iterator tablicy.
A oto jeszcze inny sposób na wydrukowanie środowiska:
@keys = keys %ENV;
@values = values %ENV;
while ($#keys >= 0) {
print pop(@keys), '=', pop(@values), "\n";
}
a co, jeśli by je posortować według klucza:
foreach $key (sort(keys %ENV)) {
print $key, '=', $ENV{$key}, "\n";
}
Aby posortować tablicę według wartości, będziesz musiał użyć funkcji sort. Oto numeryczne
posortowanie tablicy asocjacyjnej według jej wartości:
foreach $key (sort { $hash{$b} <=> $hash{$a} } keys %hash)) {
printf "%4d %s\n", $hash{$key}, $key;
}
Jako lwartość, keys umożliwia zwiększanie liczby komórek asocjacyjnych, zaalokowanych dla danej
tablicy asocjacyjnej. Możesz zyskać na efektywności, jeśli tablica ma być duża. (Jest to podobne
do pre-rozszerzania tablicy przez przeznaczanie $#array większego numeru.) Jeśli powiesz
keys %hash = 200;
to %hash będzie miał co najmniej 200 zaalokowanych komórek. Komórki te będą utrzymywane nawet,
jeśli zrobisz %hash = (). Jeśli chcesz zwolnić zasób wewnątrz zakresu, użyj undef %hash.
Korzystając z powyższej właściwości, zawsze można zmniejszyć liczbę zaalokowanych komórek.
kill LISTA
Wysyła sygnał do listy procesów. Pierwszy element listy musi być nazwą sygnału. Zwraca liczbę
procesów, do których udało się przesłać sygnał.
$cnt = kill 1, $child1, $child2;
kill 9, @goners;
W przeciwieństwie do zachowania w powłoce, w perlu jeśli -1SYGNAŁ jest ujemny, to killuje grupy
procesów, zamiast procesów. (W Systemie V, ujemny numer PROCESU odnosi się też do grup procesów,
lecz nie jest to przenośne.) Oznacza to, że zazwyczaj chcesz przekazywać sygnały dodatnie. Możesz
też używać nazw sygnałów w cudzysłowach. Zobacz jeszcze sekcję Signals w podręczniku perlipc(1).
last ETYKIETA
last Komenda last jest podobna do instrukcji break z C (używanej w pętlach); przerywa natychmiastowo
pętlę. Jeśli pominięty jest parametr ETYKIETY, to komenda odnosi się do najbardziej wewnętrznej
pętli zamykającej. Potencjalna instrukcja bloku continue nie jest wykonywana:
LINE: while (<STDIN>) {
last LINE if /^$/; # zakończ po skończeniu z nagłówkiem
...
}
lc WYRAŻ
lc Zwraca WYRAŻ w małych literach. Jest to wewnętrzna funkcja, implementująca escape \L w łańcuchach
ujętych w cudzysłowy. Jeśli włączone jest use locale, to szanuje bieżące locale LC_CTYPE. Zobacz
stronę podręcznika perllocale(1).
Jeśli WYRAŻ jest pominięte, używane jest $_.
lcfirst WYRAŻ
lcfirst Zwraca wartość WYRAŻ, w którym pierwszy znak jest zastąpiony małą literą. Jest to funkcja
wewnętrzna, implementująca escape \l w łańcuchach ujętych w podwójne cudzysłowy. Jeśli włączone
jest use locale, to szanuje bieżące locale LC_CTYPE. Zobacz stronę podręcznika perllocale(1).
Jeśli WYRAŻ jest pominięte, używane jest $_.
length WYRAŻ
length Zwraca długość w znakach wartości WYRAŻ. Jeśli WYRAŻ jest pominięte, zwracana jest długość $_.
link STARYPLIK,NOWYPLIK
Tworzy nową nazwę pliku, dowiązaną do starej nazwy pliku. Po sukcesie zwraca 1, a w przeciwnym
wypadku 0.
listen GNIAZDO,ROZMIARKOLEJKI
Robi to samo, co wywołanie systemowe listen(2). Zwraca TRUE po sukcesie, a w przeciwnym wypadku
FALSE. Zobacz przykład w sekcji Sockets: Client/Server Communication w podręczniku perlipc(1).
local WYRAŻ
Local modyfikuje wymienione zmienne tak, że są lokalne w otaczającym je bloku, podprocedurze,
eval{}, lub do. Jeśli wymieniona jest więcej niż jedna wartość, to lista musi być umieszczona w
nawiasach. Zobacz sekcję Temporary Values via local() w podręczniku perlsub(1).
Zamiast local(), często raczej wolałbyś użyć my(), gdyż to pierwsze tak naprawdę nie jest tym
czym się większości ludzi wydaje. Odsyłam do sekcji Private Variables via my() w podręczniku
perlsub(1).
localtime WYRAŻ
Konwertuje czas, zwrócony przez funkcję time na 9-elementową tablicę, której czas jest
zanalizowany dla lokalnej strefy czasowej. Zazwyczaj jest to używane następująco:
# 0 1 2 3 4 5 6 7 8
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) =
localtime(time);
Wszystkie elementy tablicy są numeryczne i pochodzą wprost ze struktury tm. W rzeczywistości
znaczy to, że $mon ma zasięg 0..11, a $wday 0..6, gdzie 0 oznacza niedzielę. Poza tym, $year jest
liczbą lat ot 1900 roku, tj. rok 123 oznacza 2023.
Jeśli WYRAŻ zostanie pominięte, to używany jest czas bieżący (localtime(time)).
W kontekście skalarnym, zwraca wartość ctime(3):
$now_string = localtime; # np., "Thu Oct 13 04:54:34 1994"
Zobacz też moduł Time::Local i funkcje strftime(3) i mktime(3), dostępne przez moduł POSIX.
log WYRAŻ
log Zwraca logarytm (podstawa e) z WYRAŻ. Jeśli WYRAŻ jest pominięte, zwraca wartość dla $_.
lstat UCHWYTPLIKU
lstat WYRAŻ
lstat Robi to samo, co funkcja stat(), lecz zamiast plików, na które wskazują dowiązania symboliczne,
testuje same dowiązania. Jeśli twój system nie obsługuje dowiązań symbolicznych, dokonywany jest
zwykły stat().
Jeśli WYRAŻ jest pominięte, używane jest $_.
m// Operator porównania. Zobacz stronę perlop(1).
map BLOK LISTA
map WYRAŻ,LISTA
Analizuje BLOK lub WYRAŻ dla każdego elementu LISTY (ustawiając lokalnie $_ na każdy element) i
zwraca wartość listową, złożoną z wyników każdego analizowania. BLOK lub WYRAŻ jest analizowany w
kontekście listowym, więc każdy element LISTY może dać zero, jeden, lub więcej elementów w
wartości zwracanej.
@chars = map(chr, @nums);
tłumaczy listę liczb na odpowiadające im znaki. A
%hash = map { getkey($_) => $_ } @array;
jest tylko śmiesznym sposobem zapisania
%hash = ();
foreach $_ (@array) {
$hash{getkey($_)} = $_;
}
mkdir NAZWAPLIKU,PRAWA
Tworzy katalog, podany jako NAZWAPLIKU, którego prawa są określone przez PRAWA (zmodyfikowane
przez umaskę). Jeśli operacja zakończy się sukcesem, zwraca 1, w przeciwnym wypadku zwraca 0 i
ustawia $! (errno).
msgctl ID,CMD,ARG
Woła funkcję IPC msgctl(2) z Systemu V. Jeśli CMd jest &IPC_STAT, to ARG musi być zmienną, która
będzie przechowywać zwróconą strukturę msquid_ds. Wartość zwracana tej funkcji jest podobna do
ioctl: dla błędu wartość niezdefiniowana, "0 but true" dla zera, oraz rzeczywista wartość
zwracana dla innych wypadków.
msgget KLUCZ,FLAGI
Woła funkcję IPC msgget(2) z Systemu V. Zwraca identyfikator kolejki komunikatów, lub wartość
niezdefiniowaną (w wypadku błędu).
msgsnd ID,MSG,FLAGI
Woła funkcję IPC msgsnd(2) z Systemu V, która przesyła komunikat MSG do kolejki komunikatów ID.
MSG musi zaczynać się wartością long int, określającą typ, którą można utworzyć z pomocą
pack("l",$typ). Zwraca TRUE po sukcesie i FALSE w wypadku błędu.
msgrcv ID,VAR,ROZMIAR,TYP,FLAGI
Woła funkcję IPC msgrcv(2) z Systemu V. Funkcja odbiera komunikat z kolejki komunikatów ID i
zapisuje go do zmiennej VAR. Maksymalna odbierana wiadomość ma wielkość ROZMIAR. Zauważ, że gdy
wiadomość jest odbierana, to jej typ będzie pierwszą rzeczą, lądującą w VAR, a maksymalna długość
VAR to ROZMIAR plus rozmiar typu komunikatu. Zwraca TRUE po sukcesie, a FALSE w wypadku błędu.
[przyp.tłum.: pole TYPE generalnie w IPC oznacza typ, zdefiniowany w pierwszych 4 bajtach
komunikatu]
my WYRAŻ
Instrukcja "my" deklaruje wymienione zmienne jako lokalne dla zamkniętego bloku, podprocedury,
eval lub pliku potraktowanego instrukcjami do/require/use. Jeśli wymieniono więcej niż jedną
wartość, lista musi być ujęta w nawiasy. Zobacz jeszcze sekcję Private Variables via my() w
podręczniku perlsub(1).
next ETYKIETA
next Komenda next jest podobna do instrukcji continue w C; rozpoczyna kolejną iterację pętli:
LINE: while (<STDIN>) {
next LINE if /^#/; # pozbądź się komentarzy
...
}
Zauważ, że jeśli powyżej był blok continue, to zostałby on wykonany nawet na usuniętych liniach.
Jeśli argument ETYKIETY jest pominięty, komenda odnosi się do najbardziej wewnętrznej otaczającej
pętli.
no Module LISTA
Zobacz funkcję "use", gdzie "no" jest przeciwieństwem.
oct WYRAŻ
oct Interpretuje WYRAŻ jako łańcuch ósemkowy i zwraca odpowiadającą wartość. (Jeśli WYRAŻ zaczyna się
od 0x, jest interpretowane jako łańcuch szesnastkowy.) Następujący kod obsługuje liczby
dziesiętne, ósemkowe i szesnastkowe w standardowej notacji perla lub C:
$val = oct($val) if $val =~ /^0/;
Jeśli WYRAŻ jest pominięte, używa $_. Funkcja ta jest często używana gdy łańcuch w rodzaju "644"
musi być np. przekonwertowany na prawa pliku. (Chociaż perl automatycznie konwertuje łańcuchy na
liczby, zgodnie z potrzebami, to automatyczna konwersja zakłada podstawę 10.)
open UCHWYTPLIKU,WYRAŻ
open UCHWYTPLIKU
Otwiera plik, którego nazwa jest przekazywana WYRAŻ, a następnie wiąże go z UCHWYTEMPLIKU. Jeśli
UCHWYTPLIKU jest wyrażeniem, to jego wartość jest używana jako nazwa rzeczywistego uchwytu pliku.
Jeśli WYRAŻ jest pominięte, to przyjmuje się, że zmienna skalarna o tej samej nazwie co
UCHWYTPLIKU zawiera nazwę pliku. (Zauważ, że zmienne leksykalne--te, deklarowane z pomocą
my--nie będą w ten sposób działały.)
Jeśli nazwa pliku rozpoczyna się od '<' lub od niczego, plik jest otwierany dla wejścia
(odczytu). Jeśli nazwa pliku rozpoczyna się od '>', plik jest kasowany i otwierany dla zapisu.
Jeśli nazwa pliku rozpoczyna się od '>>', plik jest otwierany dla dopisywania. Jeśli przed '>'
lub '<' postawisz '+', oznacza to, że chcesz zarówno czytać, jak i zapisywać do pliku. Tryb '+<'
jest zazwyczaj preferowany dla poprawek odczytu/zapisu--tryb '+>' najpierw pobiłby plik.
Przedrostek i nazwa pliku mogą być oddzielone spacjami. Wszystkie te przedrostki odpowiadają
trybom otwarcia funkcji fopen(3).
Jeśli nazwa pliku rozpoczyna się od "⎪", to plik jest rozumiany jako komenda, do której potokiem
przesyłane jest wyjście. Odwrotnie, jeśli nazwa pliku kończy się tym symbolem, to nazwa pliku
jest interpretowana jako komenda, której wyjście jest przesyłane potokiem na nasze wejście
(Zobacz sekcję Using open() for IPC w podręczniku perlipc(1)). (Możesz nie mieć czystego open(),
powodującego, że komenda jest zarówno potokiem wejściowym, jak i wyjściowym. Są jednak na to
rady, zobacz stronę podręcznika IPC::Open2, IPC::Open3, oraz sekcję Bidirectional Communication w
podręczniku perlipc(1).)
Otwieranie '-' otwiera strumień STDIN, a otwieranie '>-' otwiera STDOUT. Open po sukcesie zwraca
zero, a w przeciwnym wypadku wartość niezdefiniowaną. Jeśli open otworzył potok, wartość
zwracana jest identyfikatorem podprocesu (pid).
Jeśli masz na tyle pecha, że pracujesz z perlem na systemie, który odróżnia pliki tekstowe i
binarne (nowoczesne systemy ich nie rozróżniają), to powinieneś poczytać o funkcji binmode,
opisanej gdzieś w tym dokumencie. Systemy, wymagające binmode rozpoznaje się po ich formacie
pliku tekstowego. Systemy takie, jak Unix i Plan9, które oddzielają linie pojedynczym znakiem i
które kodują go w C jako "\n", nie potrzebują binmode. Reszta tak.
Przykłady:
$ARTICLE = 100;
open ARTICLE or die "Nie mogę znaleźć artykułu $ARTICLE: $!\n";
while (<ARTICLE>) {...
open(LOG, '>>/usr/spool/news/twitlog'); # (log jest zarezerwowany)
open(DBASE, '+<dbase.mine'); # otwórz dla odnowienia
open(ARTICLE, "caesar <$article ⎪"); # dekoduj artykuł
open(EXTRACT, "⎪sort >/tmp/Tmp$$"); # $$ jest pidem naszego procesu
# przetwórz listę argumentów plików, wraz z wszelkimi załącznikami
foreach $file (@ARGV) {
process($file, 'fh00');
}
sub process {
local($filename, $input) = @_;
$input++; # jest to inkrementacja łańcuchowa
unless (open($input, $filename)) {
print STDERR "Nie mogę otworzyć $filename: $!\n";
return;
}
while (<$input>) { # note use of indirection
if (/^#include "(.*)"/) {
process($1, $input);
next;
}
... # cokolwiek
}
}
Możesz również, zgodnie z tradycją powłoki Bourne, podać WYRAŻ, zaczynający się od ">&", co
oznacza, że reszta łańcucha jest interpretowana jako nazwa uchwytu pliku (lub numerycznego
deskryptora pliku), który należy zduplikować i otworzyć. & można użyć po >, >>, <, +>, +>>, i +<.
Tryb, który podasz, powinien odpowiadać trybowi oryginalnego uchwytu pliku. (Duplikowanie
uchwytów pliku nie pobiera na konto żadnych istniejących zawartości buforów stdio.) Oto skrypt,
który zachowuje, przekierowuje i odświeża STDOUT i STDERR:
#!/usr/bin/perl
open(SAVEOUT, ">&STDOUT");
open(SAVEERR, ">&STDERR");
open(STDOUT, ">foo.out") ⎪⎪ die "Nie mogę przekierować stdout";
open(STDERR, ">&STDOUT") ⎪⎪ die "Nie mogę zduplikować stdout";
select(STDERR); $⎪ = 1; # zrób niebuforowane
select(STDOUT); $⎪ = 1; # j/w
print STDOUT "stdout 1\n"; # działa to też dla
print STDERR "stderr 1\n"; # podprocesów
close(STDOUT);
close(STDERR);
open(STDOUT, ">&SAVEOUT");
open(STDERR, ">&SAVEERR");
print STDOUT "stdout 2\n";
print STDERR "stderr 2\n";
Możesz podać "<&=N", gdzie N jest liczbą. Perl wtedy dokona operacji równoważnej fdopen(3) z C.
Na przykład:
open(FILEHANDLE, "<&=$fd")
Jeśli otwierasz potok do komendy "-", np. albo "⎪-" albo "-⎪", to dokonywany jest niejawny fork,
a zwrócona wartość open jest wewnątrz procesu rodzicielskiego pidem potomka, a w wątku potomka
zerem. (Aby określić, czy open był pomyślny, użyj defined($pid).) Uchwyt pliku u rodzica
zachowuje się normalnie, lecz i/o dla tego uchwytu jest przesyłane przez potok STDOUT/STDIN
procesu potomnego. W procesie potomny uchwyt nie jest otwierany--i/o jest z/do nowego STDOUT lub
STDIN. Zazwyczaj jest to używane jak normalny potokowy open, lecz daje lepszą kontrolę nad
wywoływaniem komendy potoku, np. gdy pracujesz w suid i nie chcesz być zmuszonym do skanowania
komend powłoki w poszukiwaniu metaznaków. Następujące pary są mniej lub bardziej równoważne:
open(FOO, "⎪tr '[a-z]' '[A-Z]'");
open(FOO, "⎪-") ⎪⎪ exec 'tr', '[a-z]', '[A-Z]';
open(FOO, "cat -n '$file'⎪");
open(FOO, "-⎪") ⎪⎪ exec 'cat', '-n', $file;
Dla szczegółów, zobacz sekcję Safe Pipe Opens w podręczniku perlipc(1).
UWAGA: Przy każdej operacji, dokonującej forkowania, nieopróżnione bufory pozostają takie w
obydwu procesach, co znaczy, że lepiej ustawić $⎪, aby zapobiec duplikowaniu wyjścia.
Zamykanie potokowego uchwytu pliku powoduje, że proces rodzicielski czeka, aż dziecko zakończy i
zwraca wartość statusu w $?.
Jeśli używasz konstruktora z pakietu IO::Handle (lub z jego podklas, takich jak IO::File czy
IO::Socket), możesz generować anonimowe uchwyty plików, które mają zakres dowolnych zmiennych,
które utrzymują do nich referencje. Zamykają się one automatycznie po wyjściu z zakresu:
use IO::File;
...
sub read_myfile_munged {
my $ALL = shift;
my $handle = new IO::File;
open($handle, "myfile") or die "myfile: $!";
$first = <$handle>
or return (); # Automatyczne zamknięcie tutaj.
mung $first or die "mung failed"; # Lub tutaj.
return $first, <$handle> if $ALL; # Lub tutaj.
$first; # Lub tutaj.
}
Nazwa pliku, która jest przekazana open, przechodzi operację usuwania prowadzących i kończących
białych spacji. Aby otworzyć plik, posiadający te dziwne znaki, trzeba je chronić:
$file =~ s#^(\s)#./$1#;
open(FOO, "< $file\0");
Jeśli chcesz użyć prawdziwego, znanego z C open() (zobacz stronę open(2)), to powinieneś użyć
funkcji sysopen(). Jest to inny sposób chronienia nazw plików przed interpretacją. Np:
use IO::Handle;
sysopen(HANDLE, $path, O_RDWR⎪O_CREAT⎪O_EXCL, 0700)
or die "sysopen $path: $!";
HANDLE->autoflush(1);
HANDLE->print("stuff $$\n");
seek(HANDLE, 0, 0);
print "Plik zawiera: ", <HANDLE>;
Dla dalszych detali o miksowaniu odczytywania i zapisywania, obejrzyj opis seek(), znajdujący się
gdzie indziej w tym dokumencie.
opendir UCHWYTKATALOGU,WYRAŻ
Otwiera katalog o nazwie WYRAŻ. Otwarty uchwyt można przetwarzać funkcjami readdir(), telldir(),
seekdir(), rewinddir(), i closedir(). Po sukcesie zwraca TRUE. Uchwyty katalogów mają swoją
własną przestrzeń nazw. Jest ona oddzielna od uchwytów plików.
ord WYRAŻ
ord Zwraca numeryczną wartość ascii pierwszego znaku WYRAŻ. Jeśli WYRAŻ zostało pominięte, używane
jest $_. Dla operacji odwrotnej, zobacz opis chr, znajdujący się gdzieś w tym dokumencie.
pack WZORZEC,LISTA
Pobiera tablicę lub listę wartości i pakuje ją w strukturę binarną, zwracając łańcuch,
zawierający tę strukturę. WZORZEC jest sekwencją znaków, które pokazują kolejność i typy
wartości. Są one następujące:
A Łańcuch ascii, dopełniany spacjami.
a Łańcuch ascii, dopełniany przez null.
b Łańcuch bitowy (wznosząca kolejność bitów, jak w vec()).
B Łańcuch bitowy (malejąca kolejność bitów).
h Łańcuch szesnastkowy (najpierw niski nibble).
H Łańcuch szesnastkowy (najpierw wysoki nibble).
c Wartość char ze znakiem.
C Wartość char bez znaku.
s Wartość short.
S Wartość short bez znaku.
(Ten 'short' jest _dokładnie_ 16 bitowy, co może się różnić od
tego, co lokalny kompilator C nazywa jako 'short'.)
i Wartość int ze znakiem.
I Wartość int bez znaku.
(Ten 'int' jest przynajmniej 32 bitowy. Dokładny rozmiar zależy
od tego, co lokalny kompilator C uważa za 'int' i może być nawet
większe niż 'long', opisywany dalej.)
l Wartość long ze znakiem.
L Wartość long bez znaku.
(Ta wartość 'long' jest _dokładnie_ 32 bitowa, co może się
różnić od tego, co lokalny kompilator C uważa za 'long'.)
n Short w porządku sieciowym (big-endian).
N Long w porządku sieciowym (big-endian).
v Short w porządku "VAX" (little-endian).
V Long w porządku "VAX" (little-endian).
(Te 'short' i 'long' są _dokładnie_ 16 i
32 bitowe (odpowiednio).)
f Float pojedynczej precyzji w formacie macierzystym.
d Float podwójnej precyzji w formacie macierzystym.
p Wskaźnik do łańcucha zakończonego zerem.
P Wskaźnik do struktury (łańcuch o ustalonej długości).
u Uuencodowany łańcuch.
w Skompresowany integer BER. Jego bajty reprezentują całkowity
integer o podstawie 128, najpierw bardziej znaczące cyfry,
z tak małą ilością cyfr, jak tylko się da. Ósmy bit jest ustawiany
na każdym bajcie, poza ostatnim.
x Bajt null.
X Wstecz o bajt (?) (Back up a byte).
@ Wypełnienie null do bezwzględnej pozycji (?)
(Null fill to absolute position).
Po każdej literze może opcjonalnie następować liczba, która podaje licznik powtórzeń. Dla
wszystkich typów, poza "a", "A", "b", "B", "h", "H", i "P", funkcja pack pożre tyle samo wartości
z LISTY. Gwiazdka (*) dla licznika powtórzeń, oznacza użycie wszystkich elementów, które
pozostały. Typy "a" i "A" pobierają tylko jedną wartość, lecz pakują ją jako łańcuch o podanej
długości, wypełniając ją w razie potrzeby zerami, lub spacjami. (Podczas rozpakowywania, "A"
zdejmuje kończące spacje i zera, lecz "a" tego nie robi.) Podobnie, pola "b" i "B" pakują
łańcuchy, które są długości tylu bitów. "h" i "H" pakują łańcuchy, które są długości tylu
nibblów. "P" pakuje wskaźnik do struktury, której rozmiar jest wskazywany przez długość. Liczby
rzeczywiste (float, double) są tylko w formacie macierzystym maszyny; z powodu wielości formatów
zmiennoprzecinkowych i braku standardowej reprezentacji "sieciowej", nie ma żadnego sposobu
uniwersalnej wymiany. Oznacza to, że spakowane dane zmiennoprzecinkowe, zapisane na jednej
maszynie, mogą nie być odczytywalne na innej - nawet jeśli obydwie używają arytmetyki
zmiennoprzecinkowej IEEE (gdyż endainowość pamięci nie jest częścią specyfikacji IEEE). Zauważ,
że perl używa wewnętrznie dla wszystkich obliczeń numerycznych reprezentacji double i że
konwersja z double na float, a potem z powrotem na double powoduje utratę precyzji (np.
unpack("f", pack("f", $foo)) nie będzie w ogólnym przypadku się równać $foo).
Przykłady:
$foo = pack("cccc",65,66,67,68);
# foo to "ABCD"
$foo = pack("c4",65,66,67,68);
# to samo
$foo = pack("ccxxcc",65,66,67,68);
# foo to "AB\0\0CD"
$foo = pack("s2",1,2);
# "\1\0\2\0" na little-endian
# "\0\1\0\2" na big-endian
$foo = pack("a4","abcd","x","y","z");
# "abcd"
$foo = pack("aaaa","abcd","x","y","z");
# "axyz"
$foo = pack("a14","abcdefg");
# "abcdefg\0\0\0\0\0\0\0"
$foo = pack("i9pl", gmtime);
# rzeczywista struktura tm (przynajmniej na moim systemie)
sub bintodec {
unpack("N", pack("B32", substr("0" x 32 . shift, -32)));
}
Ten sam wzorzec może być ogólnie używany też w funkcji unpack.
package PRZESTRZEŃNAZW
Deklaruje jednostkę kompilacji, przynależącą do danej przestrzeni nazw. Zakres deklaracji
pakietu leży od deklaracji, do końca otaczającego bloku (tak samo, jak zakres operatora local()).
Wszelkie dalsze niekwalifikowane identyfikatory dynamiczne będą wewnątrz tej przestrzeni nazw.
Instrukcja package dotyczy tylko zmiennych dynamicznych--włączając w to te, których użyłeś
lokalnie (local()),--lecz nie zmienne leksykalne, utworzone przez my(). Zazwyczaj jest to
pierwsza deklaracja we włączanym przez require lub use pliku. Możesz przełączyć się do pakietu w
więcej niż jednym miejscu; ma to wpływ jedynie na to, której tablicy symboli używa kompilator dla
reszty bloku. Do zmiennych i uchwytów plików z innych pakietów, możesz odnosić się,
poprzedzając identyfikatory nazwami pakietów, za którymi następują dwa dwukropki:
$Pakiet::Zmienna. Jeśli nazwa pakietu jest zerowa, używany jest pakiet main. Tak więc $::sail
jest równoważne $main::sail.
Zobacz sekcję Packages w podręczniku perlmod(1). Zobacz też podręcznik perlsub(1), gdzie opisane
są problemy zakresów.
pipe UCHWYTODCZYTU,UCHWYTZAPISU
Otwiera parę połączonych potoków, zupełnie jak wywołanie systemowe pipe(2). Zauważ, że jeśli
zestawiasz pętle potokowych procesów, to o ile nie zachowasz ostrożności, może pojawić się
deadlock. Dodatkowo, zauważ, że potoki perla używają buforowania stdio, więc możesz być zmuszonym
ustawić $⎪, aby opróżnić swój UCHWYTZAPISU po każdej z komend, zależnie od aplikacji.
Obejrzyj jeszcze stronę IPC::Open2, IPC::Open3 oraz sekcję Bidirectional Communication z
podręcznika perlipc(1). Są tam przykłady takich rzeczy.
pop TABLICA
pop Pobiera i zwraca ostatnią wartość tablicy, skracając ją o jeden. Ma podobne działanie do
$tmp = $ARRAY[$#ARRAY--];
Jeśli tablica nie ma elementów, zwracana jest wartość niezdefiniowana. Jeśli parametr TABLICA
zostanie pominięty, to pobiera z tablicy @ARGV w programie głównym, oraz z @_ w podprocedurach,
podobnie jak shift().
pos SKALAR
pos Zwraca offset, gdzie dla zmiennej SKALAR zakończyło się ostatnie przeszukiwanie m//g. (Jeśli nie
podano zmiennej, używany jest $_). Można go modyfikować w celu zmieniania offsetu. Modyfikacja
ta wpłynie również na zapewnienia zerowej szerokości \G w wyrażeniach regularnych. Zobacz
podręczniki perlref(1) i perlop(1).
print UCHWYTPLIKU LISTA
print LISTA
print Drukuje oddzieloną przecinkami listę łańcuchów. Po sukcesie zwraca TRUE. UCHWYTPLIKU może być
nazwą zmiennej skalarnej, w którym wypadku zmienna ta przechowuje nazwę lub referencję do uchwytu
pliku, wprowadzając tak poziom niebezpośredniości. (UWAGA: Jeśli UCHYTPLIKU jest zmienną, a
następny token jest [term], to może to być źle zinterpretowane jako operator, chyba że wstawisz
+, lub ujmiesz argumenty w nawiasy.) Jeśli UCHWYTPLIKU jest pominięty, drukowanie następuje na
standardowe wyjście (lub do ostatnio wybranego kanału wyjściowego--zobacz opis select, znajdujący
się gdzieś w tym dokumencie ). Jeśli pominięto również argument LISTY, na STDOUT drukowane jest
$_. Aby ustawić kanał wyjściowy na coś innego niż STDOUT, użyj operacji select. Zauważ, że z
uwagi na to, że print pobiera LISTĘ, wszystko z LISTY jest analizowane w kontekście listowym, a
wszelka podprocedura, którą wywołasz, będzie miała jedno, lub więcej wyrażeń analizowanych w
kontekście listowym. Uważaj też, by nie wpisywać z słowem kluczowym print lewego nawiasu, chyba
że chcesz by odpowiadający prawy nawias kończył argumenty do drukowania--wstaw +, lub otocz
wszystkie argumenty nawiasami.
Zauważ, że jeśli przechowujesz UCHWYTYPLIKÓW w tablicy, lub innym wyrażeniu, będziesz musiał
używać bloku, zwracającego jego wartość:
print { $files[$i] } "stuff\n";
print { $OK ? STDOUT : STDERR } "stuff\n";
printf UCHWYTPLIKU FORMAT, LISTA
printf FORMAT, LISTA
Równoważne print UCHWYTPLIKU sprintf(FORMAT, LISTA). Pierwszy argument list będzie
interpretowany jako format printf. Jeśli włączone jest use locale, to znak używany dla kropki
dziesiętnej jest zależny od locala LC_NUMERIC. Zobacz stronę podręcznika perllocale(1).
Nie wpadnij w pułapkę używania printf(), gdy wystarczyłby zwykły print(). Funkcja print() jest
efektywniejsza i mniej wrażliwa na błędy.
prototype FUNKCJA
Zwraca w postaci łańcucha prototyp funkcji (lub undef, jeśli funkcja nie ma prototypu). FUNKCJA
jest referencją lub nazwą funkcji, której prototyp usiłujemy uzyskać.
push TABLICA,LISTA
Traktuje TABLICĘ jako stos i wrzuca na jej szczyt wartości LISTY. Długość TABLICY zwiększa się o
długość LISTY. Ma takie samo działanie jak
for $value (LIST) {
$ARRAY[++$#ARRAY] = $value;
}
lecz jest efektywniejsze. Zwraca nową liczbę elementów tablicy.
q/ŁAŃCUCH/
qq/ŁAŃCUCH/
qx/ŁAŃCUCH/
qw/ŁAŃCUCH/
Uogólnione cudzysłowy. Zobacz stronę perlop(1).
quotemeta WYRAŻ
quotemeta
Zwraca wartość WYRAŻ z poprzedzonymi odwróconymi ukośnikami wszystkimi nie-alfanumerycznymi
znakami. (To znaczy, że wszystkie znaki, nie podpadające pod /[A-Za-z_0-9]/ zostaną poprzedzone
odwrotnym ukośnikiem, niezależnie od ustawień locale.) Jest to wewnętrzna funkcja,
implementująca escape Q w łańcuchach z podwójnych cudzysłowów.
Jeśli WYRAŻ jest pominięte, używane jest $_.
rand WYRAŻ
rand Zwraca losową liczbę, większą lub równą 0 i mniejszą od wartości WYRAŻ. (WYRAŻ powinno być
dodatnie.) Jeśli WYRAŻ jest pominięte, używana jest wartość 1. Automatycznie wywołuje srand(),
chyba że był on już wywołany. Zobacz też opis srand().
(Uwaga: Jeśli twoja funkcja rand zwraca stale liczby, które są zbyt wielkie, lub zbyt małe, to
znaczy, że twoja wersja perla prawdopodobnie została skompilowana ze złą liczbą RANDBITS.)
read UCHWYTPLIKU,SKALAR,DŁUGOŚĆ,OFFSET
read UCHWYTPLIKU,SKALAR,DŁUGOŚĆ
Próbuje odczytać DŁUGOŚĆ bajtów danych do zmiennej SKALAR z pliku wskazywanego przez UCHWYTPLIKU.
Zwraca liczbę odczytanych bajtów, lub undef w wypadku błędu. SKALAR zostanie rozciągnięty, lub
skurczony do rzeczywistej długości odczytanych danych. Można też podać OFFSET. Wtedy odczyt
nastąpi w innym miejscu niż początek łańcucha. Wywołanie to jest w rzeczywistości
zaimplementowane w oparciu o wywołanie fread(3) stdio. Aby uzyskać prawdziwe wywołanie systemowe
read(2), użyj sysread().
readdir UCHWYTKATALOGU
Zwraca następny wpis katalogu, otwartego przez opendir(). Jeśli jest używane w kontekście
listowym, zwraca resztę wpisów w katalogu. Jeśli nie ma już więcej wpisów, w kontekście skalarnym
zwracana jest wartość niezdefiniowana, a w kontekście listowym listę null.
Jeśli masz zamiar dokonywać testów plikowych na wartościach zwracanych przez readdir(), to lepiej
poprzedź te nazwy katalogiem. Powinno się tak robić, gdyż nie readdir() nie przechodzi do swojego
katalogu i zaszło by testowanie nie tego pliku co trzeba.
opendir(DIR, $some_dir) ⎪⎪ die "Nie powiódł się opendir $some_dir: $!";
@dots = grep { /^\./ && -f "$some_dir/$_" } readdir(DIR);
closedir DIR;
readlink WYRAŻ
readlink
Zwraca wartość dowiązania symbolicznego. Działa to, jeśli dowiązania symboliczne są
zaimplementowane [w systemie]. W przeciwnym wypadku powstaje błąd krytycznych. W wypadku błędu
systemowego, zwracana jest wartość niezdefiniowana i ustawiane jest $! (errno). Jeśli WYRAŻ
zostanie pominięte, używane jest $_.
recv GNIAZDO,SKALAR,DŁUGOŚĆ,FLAGI
Odbiera komunikat na gnieździe. Próbuje odebrać DŁUGOŚĆ bajtów do zmiennej SKALAR. (GNIAZDO to
uchwyt gniazda). W rzeczywistości funkcja wykonuje odpowiednik funkcji C recvfrom()(2), więc
zwraca adres nadawcy. W wypadku błędu, zwracana jest wartość niezdefiniowana. SKALAR będzie
rozciągany do długości rzeczywiście odczytanych danych. Flagi są takie same jak w wywołaniu
systemowym o tej samej nazwie. Zobacz jeszcze sekcję UDP: Message Passing w podręczniku
perlipc(1). Są tam przykłady.
redo ETYKIETA
redo Komenda redo restartuje blok pętli, nie analizując przy tym warunku. Blok continue (jeśli taki
istnieje) również nie jest wykonywany. Jeśli pominięta zostanie ETYKIETA, komenda odnosi się do
najbardziej wewnętrznej otaczającej pętli. Komenda ta jest zazwyczaj wykorzystywana przez
programy, które chcą się oszukiwać co do tego, co było właśnie pobrane:
# Uproszczony ogołacacz komentarzy Pascala
# (uwaga: zakłada brak { i } w łańcuchach)
LINE: while (<STDIN>) {
while (s⎪({.*}.*){.*}⎪$1 ⎪) {}
s⎪{.*}⎪ ⎪;
if (s⎪{.*⎪ ⎪) {
$front = $_;
while (<STDIN>) {
if (/}/) { # Koniec komentarza?
s⎪^⎪$front{⎪;
redo LINE;
}
}
}
print;
}
ref WYRAŻ
ref Jeśli wartość WYRAŻ jest referencją, zwracane jest TRUE, a w przeciwnym wypadku FALSE. Jeśli
WYRAŻ zostanie pominięte, użyte zostanie $_. Zwracana wartość zależy od typu, do którego
referencja jest referencją. Wbudowane typy to:
REF
SCALAR
ARRAY
HASH
CODE
GLOB
Jeśli referencjowany obiekt został błogosławiony (bless()) do pakietu, to zwracana jest nazwa
pakietu. Możesz myśleć o ref() jak o operatorze typeof().
if (ref($r) eq "HASH") {
print "r jest referencją do tablicy asocjacyjnej.\n";
}
if (!ref ($r) {
print "r nie jest referencją.\n";
}
Zobacz też stronę podręcznika perlref(1).
rename STARANAZWA,NOWANAZWA
Zmienia nazwę pliku. Po sukcesie zwraca 1, w przeciwnym wypadku 0. Nie działa między granicami
systemów plików.
require WYRAŻ
require Zażądaj pewnej właściwości, podanej przez WYRAŻ, lub $_, jeśli go nie podano. Jeśli WYRAŻ jest
numeryczne, to wymaga ono by bieżąca wersja perla ($] lub $PERL_VERSION) była większa lub równa
WYRAŻ.
W przeciwnym wypadku żąda włączenia pliku biblioteki (o ile nie jest on już włączony). Plik jest
włączany z użyciem mechanizmu do-PLIK, który w zasadzie jest wariacją eval(). Semantyka jest
podobna do następującej podprocedury:
sub require {
local($filename) = @_;
return 1 if $INC{$filename};
local($realfilename,$result);
ITER: {
foreach $prefix (@INC) {
$realfilename = "$prefix/$filename";
if (-f $realfilename) {
$result = do $realfilename;
last ITER;
}
}
die "Nie mogę znaleźć $filename w \@INC";
}
die $@ if $@;
die "$filename nie zwróciło prawdziwej wartości" unless $result;
$INC{$filename} = $realfilename;
$result;
}
Zauważ, że plik nie będzie włączany pod tą samą nazwą dwukrotnie. Jako ostatnią instrukcję, plik
musi zwracać TRUE, wskazując tak pomyślne wykonanie kodu inicjalizacji, więc zazwyczaj kończy się
takie pliki "1;", chyba że jesteś pewien, że zwróci TRUE tak czy inaczej. Lepiej jednak wstawić
po prostu"1;", na wypadek np. dodania nowych instrukcji.
Jeśli WYRAŻ jest prostym słowem, require zakłada rozszerzenie ".pm" i samodzielnie zamienia "::"
na "/", ułatwiając ładowanie modułów standardowych. Ta postać ładowania modułów nie ryzykuje
zmieniania twojej przestrzeni nazw. to make it easy to load standard modules. This form of
loading of modules does not risk altering your namespace.
Dla potężniejszego narzędzia importu, obejrzyj opis use, znajdujący się w tym dokumencie, oraz
stronę perlmod(1).
reset WYRAŻ
reset Ogólnie, używane w bloku continue na końcu pętli, w celu wyczyszczenia zmiennych i resetowania
przeszukiwań ??, tak by znów działały. Wyrażenie jest interpretowane jako lista pojedynczych
znaków (dla podawania zakresów, można używać myślników). Wszystkie zmienne i tablice,
rozpoczynające się na jedną z tych liter, są resetowane do stanu pierwotnego. Jeśli wyrażenie
zostanie pominięte, przeszukiwania jednego-trafienia (?wzorzec?) są resetowane do ponownego
trafienia. Resetowanie tyczy się tylko obiektów bieżącego pakietu. Zwracane jest zawsze 1.
Przykłady:
reset 'X'; # resetuj wszystkie zmienne X
reset 'a-z'; # resetuj zmienne małoliterowe
reset; # resetuj tylko przeszukiwania ??
Resetowanie "A-Z" nie jest zalecane, gdyż odniesie się ono również do tablic ARGV i ENV.
Resetowane są tylko zmienne pakietu--zmienne leksykalne są nietykane, lecz one i tak oczyszczają
się na wyjściu z zakresu. Zobacz opis my, znajdujący się gdzieś w tym dokumencie.
return WYRAŻ
return Powraca z podprocedury, eval(), lub z do PLIK, z wartością podaną przez WYRAŻ. Analiza WYRAŻ może
zachodzić w kontekście listowym, skalarnym, lub pustym (void). Zależy to od sposobu użycia
wartości zwracanej, a kontekst może się zmieniać od jednego wywołania do drugiego (zobacz
wantarray()). Jeśli WYRAŻ nie jest podane, w kontekście skalarnym zwracana jest wartość
niezdefiniowana, w listowym pusta lista, a w pustym (void) nic.
(Zauważ, że przy braku return, podprocedura, eval, lub do PLIK zakończą automatycznie z wartością
ostatniego wykonanego wyrażenia.)
reverse LISTA
W kontekście listowym, zwraca wartość listową, składającą się z elementów LISTY, ułożonych w
przeciwnym porządku. W kontekście skalarnym, elementy listy są łączone w łańcuch i zwracane w
odwróconym porządku.
print reverse <>; # line tac, last line first
undef $/; # for efficiency of <>
print scalar reverse <>; # byte tac, last line tsrif
Operator ten jest też przydatny do inwersji tablicy asocjacyjnej, choć są tu pewne zastrzeżenia.
Jeśli wartość jest w oryginalnej tablicy zduplikowana, to tylko jedna z nich może być
reprezentowana jako klucz w tablicy odwróconej. Musi to też przewinąć całą tablicę i zbudować
nową, co dla dużej tablicy może trochę potrwać.
%by_name = reverse %by_address; # Inwersja tablicy asocjacyjnej
rewinddir UCHWYTKATALOGU
Ustawia bieżącą pozycję (dla funkcji readdir()) na początek katalogu, wskazywanego przez
UCHWYTKATALOGU.
rindex STR,SUBSTR,POZYCJA
rindex STR,SUBSTR
Działa tak samo jak index, lecz zwraca pozycję ostatniego pojawienia się SUBSTR w STR. Jeśli
podano POZYCJĘ, to zwracane jest ostatnie pojawienie na, lub przed tą pozycją.
rmdir NAZWAPLIKU
rmdir Kasuje pusty katalog podany przez NAZWĘPLIKU. Jeśli operacja się powiedzie, zwraca 1. W
przeciwnym wypadku zwracane jest zero i ustawiane jest $! (errno). Jeśli NAZWAPLIKU jest
pominięta, używane jest $_.
s/// Operator podmienienia. Zobacz stronę perlop(1).
scalar WYRAŻ
Wymusza interpretację skalarną wyrażenia WYRAŻ i zwraca jego wartość.
@counts = ( scalar @a, scalar @b, scalar @c );
Nie istnieje odpowiednik, konwertujący skalar w listę. Jest tak dlatego, że w praktyce nie jest
on nigdy potrzebny. Jeśli jednak naprawdę chcesz tak zrobić, możesz użyć konstrukcji @{[ (jakieś
wyrażenie) ]}, a zwykle powinno wystarczyć zwykłe (some expression).
seek UCHWYTPLIKU,POZYCJA,GDZIE
Ustawia pozycję UCHWYTUPLIKU, podobnie jak fseek(3) w stdio. UCHYTPLIKU może być wyrażeniem,
którego wartość daje nazwę uchwytu pliku. Wartości GDZIE to 0, oznaczające ustawianie nowej
pozycji na POZYCJĘ, 1 oznaczające ustawianie pozycji na pozycję bieżącą plus POZYCJĘ, oraz 2
ustawiające pozycję na EOF plus POZYCJĘ (zazwyczaj ujemną). Zamiast numerycznych wartości GDZIE,
można używać stałych SEEK_SET, SEEK_CUR i SEEK_END z modułu IO::Seekable lub POSIX. Po sukcesie
zwracane jest 1, po błędzie 0.
Jeśli chcesz ustawić pozycję pliku dla sysread() i syswrite(), nie używaj seek() -- użyj
sysseek().
Na niektórych systemach musisz wykonać seek za każdym razem, gdy przełączasz się między zapisem i
odczytem. Wśród innych rzeczy, może to mieć efekt wołania funkcji stdio clearerr(3). Wartość
GDZIE 1 jest przydatna do nie ruszania się z pozycji pliku:
seek(TEST,0,1);
Jest to również przydatne dla aplikacji, emulujących tail -f. Gdy raz wejdziesz na EOF, a potem
zaśniesz na chwilę, to dobrze przed następnym odczytem użyć seek(), aby wszystko zresetować.
seek() nie zmienia bieżącej pozycji, lecz czyści warunek EOF uchwytu, więc następne <PLIK>
powoduje, że perl znów coś będzie próbował odczytać. Mamy przynajmniej taką nadzieję.
Jeśli to nie działa (niektóre stdio są szczególnie dziwne), to możesz potrzebować czegoś więcej,
jak:
for (;;) {
for ($curpos = tell(FILE); $_ = <FILE>; $curpos = tell(FILE)) {
# szukaj jakichś rzeczy i wstaw je do plików
}
sleep($for_a_while);
seek(FILE, $curpos, 0);
}
seekdir UCHWYTKATALOGU,POZYCJA
Ustawia bieżącą pozycję polecenia readdir() dla katalogu wskazywanego przez UCHWYTKATALOGU.
POZYCJA musi mieć wartość zwracaną przez telldir().
select UCHWYTPLIKU
select Zwraca obecnie wybrany uchwyt pliku. Jeśli podano UCHWYTPLIKU, ustawia domyślny uchwyt pliku dla
wyjścia. Daje to dwa efekty: po pierwsze write, lub print bez uchwytu pliku będą zapisywały
domyślnie do tego UCHWYTUPLIKU. Po drugie, odniesienia zmiennych, związanych z wyjściem, będą się
odnosiły do tego kanału wyjścia. Np. jeśli masz ustawić początek formatu formy dla więcej niż
jednego kanału, mógłbyś użyć następującego:
select(REPORT1);
$^ = 'report1_top';
select(REPORT2);
$^ = 'report2_top';
UCHWYTPLIKU może być wyrażeniem, które daje nazwę rzeczywistego uchwytu pliku. Tak więc:
$oldfh = select(STDERR); $⎪ = 1; select($oldfh);
Niektórzy programiści wolą myśleć o uchwytach pliku jak o obiektach, posiadających metody,
zapisując ostatni przykład jako:
use IO::Handle;
STDERR->autoflush(1);
select RBITS,WBITS,EBITS,TIMEOUT
Funkcja ta woła z podanymi maskami bitowymi wywołanie systemowe select(2). Maski można
skonstruować, używając fileno() i vec():
$rin = $win = $ein = '';
vec($rin,fileno(STDIN),1) = 1;
vec($win,fileno(STDOUT),1) = 1;
$ein = $rin ⎪ $win;
Jeśli chcesz wykonywać tę funkcję na wielu uchwytach plików, możesz napisać podprocedurę:
sub fhbits {
local(@fhlist) = split(' ',$_[0]);
local($bits);
for (@fhlist) {
vec($bits,fileno($_),1) = 1;
}
$bits;
}
$rin = fhbits('STDIN TTY SOCK');
Spotykanym idiomem jest:
($nfound,$timeleft) =
select($rout=$rin, $wout=$win, $eout=$ein, $timeout);
aby blokować, aż coś stanie się gotowe, wykonaj po prostu
$nfound = select($rout=$rin, $wout=$win, $eout=$ein, undef);
Większość systemów nie zwraca niczego mądrego w $timeleft, więc wywołanie select() w kontekście
skalarnym zwróci po prostu $nfound.
Każda z masek bitowych może być niezdefiniowana. Podany timeout jest podawany w sekundach. Może
być ułamkowy. Uwaga: nie wszystkie implementacje zwracają $timeleft. Jeśli go nie zwracają, to
zwracają wartość równą tej, przekazanej w $timeout.
A oto 250 milisekundowe zaśnięcie:
select(undef, undef, undef, 0.25);
UWAGA: Nie próbuj łączyć buforowanego I/O (np. read czy <FH>) z funkcją select. Użyj zamiast tego
sysread().
semctl ID,SEMNUM,CMD,ARG
Woła funkcję IPC semctl(2) z Systemu V. Jeśli CMD to &IPC_STAT lub &GETALL, to ARG musi być
zmienną, która będzie przechowywać zwróconą strukturę semid_ds, lub tablicę wartości semafora.
Podczas błędu, podobnie jak ioctl zwraca wartość niezdefiniowaną, dla zera łańcuch "0 but true",
a dla pozostałych wartości rzeczywistą wartość zwróconą.
semget KLUCZ,NSEMS,FLAGI
Woła funkcję IPC semget(2) z Systemu V. Zwraca identyfikator semafora, lub wartość
niezdefiniowaną w przypadku błędu.
semop KLUCZ,ŁAŃCUCHOP
Woła funkcję IPC semop(2) z Systemu V. Funkcja ta dokonuje operacji semaforowych, np.
sygnalizowania i czekania. ŁAŃCUCHOP musi być spakowaną tablicą struktur semop. Każdą ze struktur
semop można wygenerować z pomocą pack("sss", $semnum, $semop, $semflag). Liczba operacji
semaforowych jest implikowana długością ŁAŃCUCHOP. Po sukcesie, funkcja zwraca TRUE, a w wypadku
błędu FALSE. Na przykład następujący fragment kodu oczekuje na semaforze $semnum z identyfikatora
$semid:
$semop = pack("sss", $semnum, -1, 0);
die "Problem z semaforem: $!\n" unless semop($semid, $semop);
Aby ustawić semafor, zamień "-1" na "1".
send GNIAZDO,MSG,FLAGI,DO
send GNIAZDO,MSG,FLAGI
Wysyła na gniazdo komunikat. Pobiera takie same flagi, jak wywołanie systemowe send(2). Na
gniazdach niepodłączonych, należy podać cel wysyłania, czyli argument DO. W tej sytuacji użyta
zostanie funkcja C sendto(2). Funkcja zwraca liczbę wysłanych znaków, lub w wypadku błędu wartość
niezdefiniowaną. Zobacz jeszcze sekcję UDP: Message Passing w podręczniku perlipc(1). Są tam
przykłady.
setpgrp PID,PGRP
Ustawia bieżącą grupę procesów dla podanego PIDa (wynoszącego 0 dla procesu bieżącego). Funkcja
powoduje błąd krytyczny na maszynach nie implementujących setpgrp(2). Jeśli argumenty są
pominięte, odnosi się to domyślnie do 0,0. Zauważ, że wersja POSIX setpgrp() nie przyjmuje
żadnych argumentów, więc przenośne jest tylko setpgrp 0,0.
setpriority CZYJE,KTO,PRIORYTET
Ustawia bieżący priorytet procesu, grupy procesów, lub użytkownika. (Zobacz setpriority(2).) Na
maszynach nie implementujących tego wywołania systemowego, powoduje błąd krytyczny.
setsockopt GNIAZDO,POZIOM,NAZWAOPC,WARTOPC
Ustawia żądaną opcję gniazda. W wypadku błędu, zwraca wartość niezdefiniowaną. Jeśli nie chcesz
przekazywać argumentu, WARTOPC może być podane jako undef.
shift TABLICA
shift Wysuwa pierwszą wartość tablicy i zwraca ją, skracając tablicę o 1 i przenosząc wszystko w dół.
Jeśli w tablicy nie ma elementów, zwracana jest wartość niezdefiniowana. Jeśli TABLICA zostanie
pominięta, to przesuwana jest w programie głównym tablica @ARGV, oraz @_ w podprocedurach. (Jest
to określone leksykalnie.) Zobacz też unshift(), push() oraz pop(). Shift() i unshift() robią to
samo na lewym końcu tablicy, co pop() i push() na prawym.
shmctl ID,CMD,ARG
Woła funkcję IPC shmctl(2) z Systemu V. Jeśli CMD jest &IPC_STAT, to ARG musi być zmienną, która
będzie przechowywać zwróconą strukturę shmid_ds. Wartość zwracana jest jak w ioctl: wartość
niezdefiniowana dla błędu, "0 but true" dla zera i rzeczywista wartość zwrócona w innych
wypadkach.
shmget KLUCZ,ROZMIAR,FLAGI
Woła funkcję IPC shmget(2) z Systemu V. Zwraca identyfikator pamięci dzielonej, a w przypadku
błędu wartość niezdefiniowaną.
shmread ID,ZMIENNA,POZYCJA,ROZMIAR
shmwrite ID,ŁAŃCUCH,POZYCJA,ROZMIAR
Odczytuje, lub zapisuje segment pamięci dzielonej, rozpoczynając w pozycji POZYCJA i obsługując
rozmiar ROZMIAR bajtów. Podczas odczytu, ZMIENNA musi być elementem, który będzie przechowywał
odczytane dane. Podczas zapisywania, jeśli ŁAŃCUCH jest zbyt długi, użytych zostanie tylko
ROZMIAR bajtów; jeśli ŁAŃCUCH jest zbyt krótki, to reszta zostanie wypełniona nullami. Funkcja
zwraca po sukcesie TRUE oraz FALSE w wypadku błędu.
shutdown GNIAZDO,JAK
Wyłącza połączenie na gnieździe, w sposób wskazany przez JAK, który ma taką samą interpretację,
jak w wywołaniu systemowym shutdown(2).
sin WYRAŻ
sin Zwraca sinus z WYRAŻ (podanego w radianach). Jeśli WYRAŻ jest pominięte, zwracana jest wartość
dla $_.
Dla operacji odwrotnej do sinusa, możesz użyć funkcji POSIX::asin(), lub następującej relacji:
sub asin { atan2($_[0], sqrt(1 - $_[0] * $_[0])) }
sleep WYRAŻ
sleep Powoduje, że skrypt zasypia na WYRAŻ sekund, lub na zawsze, jeśli nie podano WYRAŻ. Spanie można
przerwać, przesyłając procesowi SIGALRM. Zwraca ilość przespanych sekund. Przypuszczalnie nie
powinno się łączyć wywołań alarm() i sleep(), gdyż sleep() jest często implementowane przy użyciu
alarm().
Na niektórych systemach, spanie może trwać do sekundy mniej niż żądałeś, zależnie od sposobu
obliczania sekund. Większość nowoczesnych systemów przesypia cały okres.
Dla pauz, lub większej dokładności niż sekunda, możesz użyć interfejsu syscall() perla i dostać
się do funkcji setitimer(2), o ile jest ona obsługiwana przez twój system. Możesz też zapoznać
się z opisem select(), znajdującym się gdzieś w tym dokumencie.
Zobacz także funkcję sigpause() z modułu POSIX.
socket GNIAZDO,DOMENA,TYP,PROTOKÓŁ
Otwiera gniazdo podanego typu i przywiązuje je do uchwytu pliku GNIAZDO. DOMENA, TYP i PROTOKÓŁ
są takie same jak dla wywołania systemowego socket(2). Przed używaniem tej funkcji, powinieneś
użyć "use Socket;", aby zaimportować odpowiednie definicje. Obejrzyj przykład w sekcji Sockets:
Client/Server Communication w podręczniku perlipc(1).
socketpair GNIAZDO1,GNIAZDO2,DOMENA,TYP,PROTOKÓŁ
Tworzy nienazwaną parę gniazd danego typu, w podanej domenie. DOMENA, TYP i PROTOKÓŁ są podawane
tak samo, jak dla wywołania systemowego socketpair(2). Jeśli funkcja nie jest zaimplementowana,
to powoduje błąd krytyczny. Po sukcesie zwracane jest TRUE.
sort NAZWA LISTA
sort BLOK LISTa
sort LISTA
Sortuje LISTĘ i zwraca posortowaną wartość listową. Jeśli pominięte zostaną parametry NAZWA lub
BLOK, sortowanie następuje w porządku porównywania łańcuchów. Jeśli podano NAZWĘ, to wskazuje ona
na podprocedurę, zwracającą liczbę całkowitą, która jest mniejsza, równa, lub większa od zera,
zależnie od tego, jak elementy tablicy mają być poukładane. W takich procedurach bardzo przydatne
są operatory <=> oraz cmp. NAZWA może być nazwą zmiennej skalarnej--w tym wypadku wartość daje
nazwę używanej podprocedury. Zamiast NAZWY można podać BLOK, czyli anonimową podprocedurę
sortującą.
W celu polepszenia efektywności, pomijany jest normalny kod wołania podprocedur: podprocedura nie
może być rekurencyjna, a dwa porównywane elementy nie są przekazywane przez @_, lecz jako
globalne zmienna pakietu $a oraz $b (zobacz przykład poniżej). Są one przekazywane przez
referencję, więc nie modyfikuj ani $a, ani $b. Nie próbuj też deklarować ich jako leksykalne.
Nie można też wyjść z bloku sortującego przy użyciu żadnego operatora kontroli pętli czy goto().
Gdy działa use locale, sort LIST sortuje LISTĘ według odpowiedniego locale. Zobacz stronę
perllocale(1).
Przykłady:
# sortuj leksykalnie
@articles = sort @files;
# to samo, z jawną procedurą sortującą
@articles = sort {$a cmp $b} @files;
# teraz niewrażliwie na wielkość liter
@articles = sort {uc($a) cmp uc($b)} @files;
# to samo w odwrotnym porządku
@articles = sort {$b cmp $a} @files;
# sortuj rosnąco, numerycznie
@articles = sort {$a <=> $b} @files;
# j/w, malejąco
@articles = sort {$b <=> $a} @files;
# sortuj, używając jawnej nazwy podprocedury
sub byage {
$age{$a} <=> $age{$b}; # założenie numeryczności
}
@sortedclass = sort byage @class;
# to sortuje tablicę asocjacyjną %age według wartości (zamiast klucza)
# przy użyciu funkcji inline
@eldest = sort { $age{$b} <=> $age{$a} } keys %age;
sub backwards { $b cmp $a; }
@harry = ('dog','cat','x','Cain','Abel');
@george = ('gone','chased','yz','Punished','Axed');
print sort @harry;
# drukuje AbelCaincatdogx
print sort backwards @harry;
# drukuje xdogcatCainAbel
print sort @george, 'to', @harry;
# drukuje AbelAxedCainPunishedcatchaseddoggonetoxyz
# sortuj nieefektywnie według malejącego porównania numerycznego,
# używając pierwszej liczby całkowitej po znaku =, lub w przeciwnym
# wypadku cały rekord, bez zwracania uwagi na wielkość liter.
@new = sort {
($b =~ /=(\d+)/)[0] <=> ($a =~ /=(\d+)/)[0]
⎪⎪
uc($a) cmp uc($b)
} @old;
# to samo, dużo efektywniej;
# zbudujemy zewnętrzne indeksy
@nums = @caps = ();
for (@old) {
push @nums, /=(\d+)/;
push @caps, uc($_);
}
@new = @old[ sort {
$nums[$b] <=> $nums[$a]
⎪⎪
$caps[$a] cmp $caps[$b]
} 0..$#old
];
# to samo, przy użyciu Schwartzian Transform (bez tymczasowych)
@new = map { $_->[0] }
sort { $b->[1] <=> $a->[1]
⎪⎪
$a->[2] cmp $b->[2]
} map { [$_, /=(\d+)/, uc($_)] } @old;
Jeśli używasz strict, nie możesz deklarować $a i $b jako leksykalia. Są one pakietowymi
globaliami. Znaczy to, że jeśli jesteś w pakiecie głównym (main), to jest to
@articles = sort {$main::b <=> $main::a} @files;
kub po prostu
@articles = sort {$::b <=> $::a} @files;
lecz jeśli jesteś w pakiecie FooPack, to jest to
@articles = sort {$FooPack::b <=> $FooPack::a} @files;
Funkcja porównująca musi się zachowywać [jednoznacznie]. Jeśli zwraca niespójne, nielogiczne
wyniki (np. czasem mówiąc, że $x[1] jest mniejsze niż $x[2], a czasem odwrotnie), to interpreter
perla prawdopodobnie się wysypie i zrzuci core. Wynika to całkowicie z zależności od systemowej
funkcji bibliotecznej qsort(3); funkcja ta często nie dokonuje pewnych sprawdzeń w celu
polepszenia szybkości.
splice TABLICA,OFFSET,DŁUGOŚĆ,LISTA
splice TABLICA,OFFSET,DŁUGOŚĆ
splice TABLICA,OFFSET
Usuwa z tablicy elementy wskazane przez OFFSET i DŁUGOŚĆ, oraz zamienia je ewentualnie podanymi
elementami LISTY. Zwraca elementy, które zostały z tablicy usunięte. Tablica zgodnie z potrzebami
rośnie, lub maleje. Jeśli parametr DŁUGOŚĆ zostanie pominięty, to usuwane jest wszystko,
poczynając od OFFSET. A oto pewne równoważności (zakładając, że $[ == 0):
push(@a,$x,$y) splice(@a,$#a+1,0,$x,$y)
pop(@a) splice(@a,-1)
shift(@a) splice(@a,0,1)
unshift(@a,$x,$y) splice(@a,0,0,$x,$y)
$a[$x] = $y splice(@a,$x,1,$y);
Przykład, przy założeniu, że długości tablic są przekazywane przed tablicami:
sub aeq { # porównaj dwie wartości listowe
local(@a) = splice(@_,0,shift);
local(@b) = splice(@_,0,shift);
return 0 unless @a == @b; # ta sama długość?
while (@a) {
return 0 if pop(@a) ne pop(@b);
}
return 1;
}
if (&aeq($len,@foo[1..$len],0+@bar,@bar)) { ... }
split /WZORZEC/,WYRAŻ,LIMIT
split /WZORZEC/,WYRAŻ
split /WZORZEC/
split Dzieli łańcuch na tablicę łańcuchów i zwraca tę tablicę.
Jeśli nie jest w kontekście listowym, to zwraca listę znalezionych pól i dzieli do tablicy @_. (w
kontekście listowym możesz wymusić dzielenie do @_, używając jako rozdzielaczy wzorca ??, lecz
będzie wciąż zwracać wartość tablicową.) Używanie jawnego dzielenia do @_ nie jest jednak
zalecane.
Jeśli WYRAŻ jest pominięty, dzielony jest łańcuch $_. Jeśli pominięty jest też WZORZEC, dzielenie
następuje na białych spacjach (po pominięciu wszelkich prowadzących białych spacji). Wszystko,
odpowiadające WZORCOWI jest uważane za rozdzielacz pól. (Zauważ, że rozdzielacz może być dłuższy
niż jeden znak.) Jeśli podano wartość LIMIT i nie jest to liczba ujemna, dzielenie następuje do
nie więcej niż tej ilości pól. Jeśli LIMIT nie jest podany, kończące wypełnienia nullowe są
obcinane (co dobrze pamiętać użytkownikom pop()). Jeśli LIMIT jest ujemny, to jest traktowany
tak, jakby podano arbitralnie duży LIMIT.
Wzorzec, odpowiadający łańcuchowi null (żeby nie być zmylonym ze wzorcem null //, który jest
tylko jednym członkiem z zestawu wzorców odpowiadających łańcuchowi null) będzie dzielił wartość
WYRAŻ na oddzielne znaki w każdym punkcie, który odpowie zapytaniu. Na przykład:
print join(':', split(/ */, 'hi there'));
da w wyniku 'h:i:t:h:e:r:e'.
Parametr LIMIT może być użyty do podzielenia linii częściowo
($login, $passwd, $remainder) = split(/:/, $_, 3);
Podczas przypisywania do listy, jeśli nie podano LIMITU, perl ustawia domyślny limit wielkości o
1 większej niż lista zmiennych na liście, zapobiegając tak niepotrzebnej pracy. Dla powyższej
listy, LIMIT byłby ustawiony domyślnie na 4. W aplikacjach, gdzie czas jest krytycznym
czynnikiem, powstrzymuje cię to od dzielenia na więcej pól, niż rzeczywiście potrzebujesz.
Jeśli WZORZEC zawiera nawiasy, z łańcuchów odpowiadającym podłańcuchom rozdzielacza tworzone są
dodatkowe elementy tablicy.
split(/([,-])/, "1-10,20", 3);
daje wartość listową
(1, '-', 10, ',', 20)
Jeśli masz cały nagłówek normalnego unixowego komunikatu pocztowego w nagłówku $header, to możesz
rozdzielić go na pola i wartości w następujący sposób:
$header =~ s/\n\s+/ /g; # obsłuż linie kontynuacji
%hdrs = (UNIX_FROM => split /^(.*?):\s*/m, $header);
Wzorzec /WZORZEC/ może być zamieniony wyrażeniem, umożliwiając tak podawanie wzorców, które
zmieniają się w czasie. (aby dokonać kompilacji czasu działania tylko raz, użyj /$variable/o.)
Specjalnym przypadkiem jest podanie jako WZORZEC spacji (' '). Będzie to powodować dzielenie na
białych spacjach, podobnie jak domyślna wersja split. Tak więc split(' ') może być używany do
domyślnego zachowania awk, gdzie split(/ /) daje tyle łańcuchów null, ile jest prowadzących
białych spacji. Split dla /\s+/ jest podobny do split(' '), lecz dowolna biała spacja powoduje
null na pierwszym polu. Split bez argumentów dokonuje w rzeczywistości wewnętrznie split(' ',
$_).
Przykład:
open(passwd, '/etc/passwd');
while (<passwd>) {
($login, $passwd, $uid, $gid, $gcos,
$home, $shell) = split(/:/);
...
}
(Zauważ, że $shell w powyższym będzie miał za sobą nową linię. Aby ją usunąć, zapoznaj się z
funkcjami chop, chomp i join, opisanymi gdzieś w tym dokumencie.)
sprintf FORMAT, LISTA
Zwraca łańcuch, sformatowany według konwencji printf, funkcji bibliotecznej języka C, sprintf(3).
Perl emuluje funkcję C sprintf(), lecz nie używa jej (poza liczbami zmiennoprzecinkowymi, a nawet
wtedy dozwolone są tylko standardowe modyfikatory). W wyniku, w perlu nie są dostępne żadne
niestandardowe rozszerzenia lokalnej wersji sprintf().
Perlowy sprintf() zezwala na następujące, ogólnie znane konwersje:
%% znak procentu
%c znak o podanym kodzie
%s łańcuch
%d integer ze znakiem, dziesiętnie
%u integer bez znaku, dziesiętnie
%o integer bez znaku, ósemkowo
%x integer bez znaku, szesnastkowo
%e liczba zmiennoprzecinkowa w notacji naukowej
%f liczba zmiennoprzecinkowa w ustalonej notacji dziesiętnej
%g liczba zmiennoprzecinkowa w notacji %e lub %f
Dodatkowo, perl zezwala na następujące szeroko-obsługiwane konwersje:
%X podobne do %x, lecz na dużych literach
%E podobne do %e, lecz z użyciem dużego E
%G podobne do %g, lecz z użyciem dużego E
%p wskaźnik (daje adres wartości, podany szesnastkowo)
%n specjalne: przechowuje liczbę dotychczas wpisanych do następnej
zmiennej z listy parametrów
I w końcu, dla kompatybilności wstecznej, perl zezwala na poniższe zbyteczne, lecz szeroko
obsługiwane konwersje:
%i synonim %d
%D synonim %ld
%U synonim %lu
%O synonim %lo
%F synonim %f
Perl zezwala na użycie następujących uniwersalnych flag między znakiem %, a literą konwersji:
spacja poprzedź liczbę dodatnią spacją
+ poprzedź liczbę dodatnią plusem
- wyrównuj do lewej w obszarze pola
0 użyj zer zamiast spacji do wyrównywania w prawo
# poprzedź liczbę ósemkową "0", szesnastkową "0x"
liczba minimalna wielkość pola
.liczba "precyzja": liczba cyfr po kropce dziesiętnej dla
zmiennoprzecinkowych, maksymalna długość dla łańcucha, lub
minimalna długość dla liczby całkowitej (integer)
l interpretuj integer jak typ C "long", lub "unsigned long"
h interpretuj integer jak typ C "short", lub "unsigned short"
Istnieje też jedna flaga specyficzna dla perla:
V interpretuj integer jako standardowy typ integera w perlu
Tam, gdzie we flagach pojawia się liczba, można użyć gwiazdki ("*"). W tym wypadku perl używa
zamiast liczby wartości następnego argumentu z listy parametrów. Jeśli szerokość pola, uzyskana
przez "*" jest ujemna, to ma to samo działanie, co flaga '-': wyrównywanie do lewej.
Jeśli działa use locale, znaki używane do kropki dziesiętnej będą drukowane według locale
LC_NUMERIC. Zobacz stronę perllocale(1).
sqrt WYRAŻ
sqrt Zwraca pierwiastek kwadratowy z WYRAŻ. Jeśli WYRAŻ jest pominięte, zwraca wartość dla $_.
srand WYRAŻ
srand Ustawia nasionko liczby losowej dla operatora rand. Jeśli pominięte zostanie WYRAŻ, używana jest
pseudolosowa wartość, oparta o bieżący czas i identyfikator procesu. W wersjach perla
wcześniejszych niż 5.004, domyślnym nasionkiem był po prostu bieżący czas time(). Nie jest to
szczególnie dobre nasionko, więc wiele starych programów załączało swoją własną wartość
inicjującą (często time ^ $$, lub C<time ^ ($$ + ($$ << 15))>), lecz teraz nie jest to konieczne.
W rzeczywistości, zazwyczaj w ogóle nie jest konieczne wywoływanie srand, ponieważ jest ono
wywoływane niejawnie przy pierwszym użyciu operatora rand. Jednak nie było tak w wersjach
wcześniejszych niż perl 5.005, więc jeśli twój skrypt ma działać ze starszymi wersjami, powinien
jednak wołać srand().
Zauważ, że dla potrzeb kryptografii potrzebujesz czegoś więcej niż tylko wylosować domyślne
nasionko. Popularną metodą jest sprawdzanie sum kontrolnych skompresowanego wyjścia z jednego,
lub więcej programów szybko zmieniającego się statusu systemu operacyjnego. Na przykład:
srand (time ^ $$ ^ unpack "%L*", `ps axww ⎪ gzip`);
Jeśli naprawdę ci na tym zależy, zobacz moduł Math::TrulyRandom w CPAN.
Nie wołaj srand() wielokrotnie, chyba że dokładnie wiesz co i w jakim celu robisz. Celem tej
funkcji jest zasilenie funkcji rand() tak, by rand() zwracał inną sekwencję dla każdego
uruchomienia programu. Zrób to raz, na samym początku programu, bo w przeciwnym wypadku nie
uzyskasz z rand() liczb losowych!
Często wywoływane programy (takie jak skrypty CGI), które jako nasionka używają po prostu
time ^ $$
mogą paść ofiarą własności matematycznej, że
a^b == (a+1)^(b+1)
przez jedną trzecią czasu. Więc nie rób tego.
stat UCHWYTPLIKU
stat WYRAŻ
stat Zwraca 13 elementową tablicę, opisującą status pliku--otwartego przez UCHWYTPLIKU lub nazwanego
przez WYRAŻ. Jeśli WYRAŻ jest pominięte, używany jest $_. Gdy funkcja zawiedzie, zwraca listę
null. Zazwyczaj jest to używane następująco:
($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,
$atime,$mtime,$ctime,$blksize,$blocks)
= stat($filename);
Nie wszystkie z tych pól są obsługiwane na wszystkich rodzajach systemów plików. Oto znaczenia
pól:
0 dev numer urządzenia systemu plików
1 ino numer inode
2 mode prawa pliku (typ i prawa)
3 nlink liczba twardych dowiązań do pliku
4 uid numeryczny UID właściciela
5 gid numeryczny GID właściciela
6 rdev identyfikator urządzenia (tylko dla plików specjalnych)
7 size całkowity rozmiar w bajtach
8 atime ostatni dostęp od epoki
9 mtime ostatnia modyfikacja od epoki
10 ctime ostatnia zmiana inode od epoki
11 blksize preferowany rozmiar bloku dla I/O systemu plików
12 blocks rzeczywista liczba zaalokowanych bloków
(Epoka nastąpiła o 00:00 1 stycznia, 1970 GMT.)
Jeśli funkcja dostanie specjalny uchwyt pliku, składający się z podkreślenia, to nie jest ona
wykonywana, lecz przekazywana jest zawartość ostatniego testu pliku. Przykład:
if (-x $file && (($d) = stat(_)) && $d < 0) {
print "$file jest wykonywalnym plikiem NFS\n";
}
(Działa to tylko na maszynach, dla których numer urządzenia jest ujemny dla NFS.)
study SKALAR
study Zajmuje trochę czasu, by przestudiować SKALAR (lub $_, jeśli go nie podano), przygotowując się na
wiele przeszukiwań wzorców na tym łańcuchu, przed jego kolejną modyfikacją. Może to pozwolić
zyskać na czasie, zależnie od natury i liczby wzorców, a także od rozłożenia częstotliwości
znaków w przeszukiwanym łańcuchu. Najlepiej sprawdzić empirycznie, czy funkcja ta wpływa na
szybkość dodatnio, czy ujemnie. Najwięcej zyskają pętle, szukające wielu krótkich, stałych
łańcuchów (włączając stałe części bardziej złożonych wzorców). Naraz można mieć obsługiwany przez
study tylko jeden łańcuch. Jeśli przejdziesz na inny skalar, to poprzedni stanie się
nieprzestudiowany. (study działa następująco: najpierw robiona jest lista powiązana dla każdego
znaku przeszukiwanego łańcucha, tak że wiemy na przykład gdzie znajdują się wszystkie znaki 'k'.
W każdym szukanym łańcuchu wybierany jest w oparciu o statyczne tablice rozkładu najrzadziej
występujący znak. Łańcuch jest poszukiwany w miejscach, gdzie znajduje się ten najrzadszy znak.)
Na przykład oto pętla, która wstawia wpisy tworzące indeks przed każdą linię, zawierającą
określony wzorzec:
while (<>) {
study;
print ".IX foo\n" if /\bfoo\b/;
print ".IX bar\n" if /\bbar\b/;
print ".IX blurfl\n" if /\bblurfl\b/;
...
print;
}
Użycie study spowoduje szukanie /\bfoo\b/ tylko w miejscach $_, które zawierają "f", gdyż jest to
najrzadszy znak. Ogólnie, daje to duże zyski, poza przypadkami patologicznymi. Jedynym pytaniem
jest to, czy zachowuje ci to więcej czasu niż zabrało zbudowanie powiązanej listy.
Zauważ, że jeśli musisz szukać łańcuchów, o których nic nie wiesz, aż do uruchomienia, to możesz
zbudować całą pętlę jako łańcuch i evalować to, by zapobiec ciągłemu rekompilowaniu wzorców. W
połączeniu z czynieniem $/ niezdefiniowanym, aby wessać całe pliki jako jeden rekord, może to być
bardzo szybkie, często szybsze niż specjalizowane programy typu fgrep(1). Następujący przykład
skanuje listę plików (@files) w poszukiwaniu listy słów (@words) i drukuje nazwy plików,
zawierających odpowiednik:
$search = 'while (<>) { study;';
foreach $word (@words) {
$search .= "++\$seen{\$ARGV} if /\\b$word\\b/;\n";
}
$search .= "}";
@ARGV = @files;
undef $/;
eval $search; # to krzyczy
$/ = "\n"; # ustaw normalny rozdzielacz wejścia
foreach $file (sort keys(%seen)) {
print $file, "\n";
}
sub BLOK
sub NAZWA
sub NAZWA BLOK
Nie jest to prawdziwa funkcja, lecz definicja podprocedury. Jeśli zawiera tylko NAZWĘ (i
przypuszczalnie prototypy), jest to tylko deklaracja. Bez NAZWY jest to deklaracja anonimowej
funkcji i zwraca wartość: referencję CODE zawężenia, które właśnie utworzyłeś. Dla dalszych
szczegółów, zobacz stronę podręcznika perlref(1).
substr WYRAŻ,OFFSET,DŁUGOŚĆ
substr WYRAŻ,OFFSET
Wyciąga z WYRAŻ podłańcuch i zwraca go. Pierwszy znak znajduje się pod offsetem 0, lub tym, na co
ustawiłeś $[ (lecz nie rób tego). Jeśli OFFSET jest ujemny, rozpoczyna się w tej odległości od
końca łańcucha. Jeśli DŁUGOŚĆ jest pominięta, zwracane jest wszystko, aż do końca łańcucha. Jeśli
DŁUGOŚĆ jest ujemna, pozostawia tyle znaków z końca łańcucha.
Funkcji substr() możesz użyć jako lwartości, w którym wypadku WYRAŻ musi być lwartością. Jeśli
przyznasz coś krótszego niż DŁUGOŚĆ, łańcuch zostanie skrócony, a jeśli coś dłuższego, to łańcuch
zostanie rozciągnięty. Aby zachować stałą długość łańcucha, możesz potrzebować dopełnić, lub
obciąć wartości przy użyciu sprintf().
symlink STARYPLIK,NOWYPLIK
Tworzy nową nazwę pliku, dowiązaną symbolicznie do starej. Po sukcesie zwraca 1, w przeciwnym
wypadku 0. Na systemach nie obsługujących dowiązań symbolicznych, funkcja ta powoduje błąd
krytyczny podczas działania. Aby go wychwycić, użyj eval:
$symlink_exists = (eval {symlink("","")};, $@ eq '');
syscall LISTA
Wywołuje wywołanie systemowe, podane jako pierwszy element listy, przekazując resztę elementów
jako argumenty wywołania. Jeśli nie jest to zaimplementowane, powoduje błąd krytyczny. Argumenty
są interpretowane następująco: jeśli podany argument jest numeryczny, przekazywany argument to
int. Jeśli nie, przekazywany jest wskaźnik do wartości tekstowej. Odpowiadasz za upewnienie się,
że łańcuch jest dość długi, by odebrać określony wynik, który może być do niego zapisany. Jeśli
twoje argumenty int nie są literałami i nie były nigdy interpretowane w kontekście numerycznym,
możesz być zmuszonym dodać do nich 0, aby wymusić na nich wygląd liczbowy.
require 'syscall.ph'; # może być niezbędne h2ph
syscall(&SYS_write, fileno(STDOUT), "hi there\n", 9);
Zauważ, że perl obsługuje przekazywanie do 14 argumentów do wywołania systemowego, co w praktyce
powinno wystarczyć.
sysopen UCHWYTPLIKU,NAZWAPLIKU,TRYB
sysopen UCHWYTPLIKU,NAZWAPLIKU,TRYB,PRAWA
Otwiera plik NAZWAPLIKU i wiąże go z UCHWYTEMPLIKU. Jeśli UCHWYTPLIKU jest wyrażeniem, to jego
wartość jest używana jako nazwa rzeczywistego uchwytu pliku. Funkcja ta woła podlegającą jej
funkcję systemu operacyjnego, open z parametrami NAZWAPLIKU, TRYB, PRAWA.
Prawidłowe wartości i bity flag parametru TRYB są zależne od systemu; są one dostępne przez
standardowy moduł Fcntl. Jednak z przyczyn historycznych, niektóre wartości są uniwersalne; zero
oznacza tylko dla odczytu, jeden tylko dla zapisu, a dwa dla zapisu i odczytu.
Jeśli plik NAZWAPLIKU nie istnieje, a wywołanie open go tworzy (zazwyczaj dlatego, że TRYB
zawiera flagę O_CREAT), to wartość PRAW określa prawa nowo utworzonego pliku. Jeśli są one
pominięte, używana jest domyślna wartość 0666, która umożliwia wszystkim odczyt i zapis. Wartość
ta ma sens, zobacz umask.
Moduł IO::File daje bardziej obiektowe podejście do tych rzeczy.
sysread UCHWYTPLIKU,SKALAR,DŁUGOŚĆ,OFFSET
sysread UCHWYTPLIKU,SKALAR,DŁUGOŚĆ
Próbuje odczytać DŁUGOŚĆ bajtów danych do zmiennej SKALAR. Odczyt następuje z pliku wskazywanego
przez UCHWYTPLIKU, przy użyciu wywołania systemowego read(2). Pomija to stdio, więc łączenie tej
funkcji z innym rodzajami odczytu, z print(), write(), seek(), lub tell() może powodować
problemy. Zwraca ilość odczytanych bajtów, lub undef w wypadku błędu. SKALAR będzie rozciągany
tak, by pasował do liczby odczytanych bajtów.
Aby spowodować odczyt danych z któregoś miejsca łańcucha (różnego niż początek), można podać
dodatkowo parametr OFFSET. Jeśli parametr ten jest ujemny, to wskazywana jest pozycja przesunięta
o tyleż bajtów w tył od końca łańcucha. Jeśli dodatni offset jest większy od długości SKALARA,
to wynikiem jest wypełnienie do wymaganego rozmiaru znakami "\-", a następnie doklejenie odczytu.
sysseek UCHWYTPLIKU,POZYCJA,GDZIE
Zmienia pozycję UCHWYTUPLIKU przy użyciu wywołania systemowego lseek(2). Pomija stdio, więc
łączenie tego z odczytami (innymi niż sysread()), z print(), write(), seek(), lub tell() może
wprowadzić problemy. UCHWYTPLIKU może być wyrażeniem, którego wartość daje nazwę uchwytu pliku.
Wartości dla GDZIE to 0 dla ustawienia nowej pozycji, 1 dla dodania nowej pozycji do bieżącej i 2
do ustawienia pozycji EOF plus offset. Dla parametru GDZIE można używać stałych SEEK_SET,
SEEK_CUR i SEEK_END z modułu IO::Seekable lub POSIX.
Zwracana jest nowa pozycja, lub wartość niezdefiniowana w wypadku błędu. Pozycja zerowa zwracana
jest jako łańcuch "0 but true"; tak więc sysseek() zwraca TRUE po sukcesie i FALSE po błędzie,
lecz wciąż możesz łatwo ustalić nową pozycję.
system LISTA
Robi dokładnie to samo, co "exec LISTA", poza tym, że dokonuje przed tym forka i proces
rodzicielski czeka, aż dziecko dokona żywota. Zauważ, że przetwarzanie argumentów różni się,
zależnie od liczby argumentów. Wartość zwracana jest statusem wyjścia programu, zwróconym przez
wywołanie wait(). Aby uzyskać rzeczywistą wartość wyjścia, podziel ją przez 256. Zobacz też opis
exec, znajdujący się gdzieś w tym dokumencie. Nie jest to sposób, którego należy używać do
przechwytywania wyjścia z komendy, dla tego celu użyj zwykłych odwróconych apostrofów
(backticks?) lub qx//, jak opisano w sekcji `ŁAŃCUCH` podręcznika perlop(1).
Ponieważ zarówno system() i odwrotne apostrofy blokują SIGINT i SIGQUIT, ubicie ich nie powoduje
przerwania twojego programu.
@args = ("command", "arg1", "arg2");
system(@args) == 0
or die "system @args się nie powiódł: $?"
A oto bardziej wyrafinowany przykład analizowania wartości zwracanej przez system(). Ma to
miejsce na systemie unixowym i jest robione, aby sprawdzić wszystkie możliwości, włącznie z
sygnałami i zrzutami core.
$rc = 0xffff & system @args;
printf "system(%s) zwrócił %#04x: ", "@args", $rc;
if ($rc == 0) {
print "normalne zakończenie\n";
}
elsif ($rc == 0xff00) {
print "komenda się nie powiodła: $!\n";
}
elsif ($rc > 0x80) {
$rc >>= 8;
print "niezerowy status wyjścia $rc\n";
}
else {
print "skończył z ";
if ($rc & 0x80) {
$rc &= ~0x80;
print "zrzutem core z ";
}
print "sygnałem $rc\n"
}
$ok = ($rc != 0);
syswrite UCHWYTPLIKU,SKALAR,DŁUGOŚĆ,OFFSET
syswrite UCHWYTPLIKU,SKALAR,DŁUGOŚĆ
Próbuje zapisać DŁUGOŚĆ bajtów ze SKALARA do pliku podanego przez UCHWYTPLIKU przy użyciu
wywołania systemowego write(2). Pomija stdio, więc łączenie tego z odczytami (innymi niż
sysread()), z print(), write(), seek(), lub tell() może spowodować problemy. Zwraca liczbę
zapisanych bajtów, lub undef w wypadku błędu. Jeśli długość jest większa niż dostępne dane,
zapisywanych jest tylko tyle danych, ile jest dostępnych.
Dodatkowo można podać OFFSET, aby zapisać dane z jakiejś części łańcucha, która nie jest
początkiem. Ujemna wartość offsetu nakazuje zapisywanie od miejsca, przesuniętego o tyle bajtów
od końca łańcucha.
tell UCHWYTPLIKU
tell Zwraca bieżącą pozycję pliku dla UCHWYTUPLIKU. UCHWYTPLIKU może być wyrażeniem, którego wartość
podaje nazwę rzeczywistego uchwytu pliku. Jeśli UCHWYTPLIKU jest pominięty, zakładany jest plik,
z którego ostatnio czytano.
telldir UCHWYTKATALOGU
Zwraca bieżącą pozycję funkcji readdir() dla UCHWYTUKATALOGU. Do seekdir() można przekazać
wartość, każącą osiągnąc określoną pozycję w katalogu.
tie ZMIENNA,NAZWAKLASY,LISTA
Funkcja ta łączy zmienną z klasą pakietu, która opisuje jej implementację. ZMIENNA jest nazwą
czarowanej zmiennej. NAZWAKLASY jest nazwą klasy, implementującej obiekty właściwego typu.
Wszelkie dodatkowe argumenty są przekazywane metodzie "new" klasy (czyli TIESCALAR, TIEARRAY, lub
TIEHASH). Zazwyczaj, argumenty te wyglądają tak, jak te, które są przekazywane funkcji
dbm_open() z C. Obiekt, zwrócony przez metodę "new" jest też zwracany przez tie(), co jest
przydatne, jeśli chcesz dostać się do innych metod w NAZWIEKLASY.
Zauważ, że funkcje takie, jak keys() i valuse() mogą zwracać wielkie wartości tablicowe, jeśli
użyć je na dużych obiektach, takich jak pliki DBM. Lepiej może być użyć funkcji each() i na nich
iterować. Przykład:
# drukuj offsety pliku historii
use NDBM_File;
tie(%HIST, 'NDBM_File', '/usr/lib/news/history', 1, 0);
while (($key,$val) = each %HIST) {
print $key, ' = ', unpack('L',$val), "\n";
}
untie(%HIST);
Klasa, implementująca tablicę asocjacyjną, powinna mieć następujące metody:
TIEHASH classname, LIST
DESTROY this
FETCH this, key
STORE this, key, value
DELETE this, key
EXISTS this, key
FIRSTKEY this
NEXTKEY this, lastkey
Klasa, implementująca zwykłą tablicę, powinna mieć następujące metody:
TIEARRAY classname, LIST
DESTROY this
FETCH this, key
STORE this, key, value
[others TBD]
Klasa, implementująca skalar, powinna mieć następujące metody:
TIESCALAR classname, LIST
DESTROY this
FETCH this,
STORE this, value
W przeciwieństwie do funkcji dbmopen(), funkcja tie() nie używa, lub wymaga dla ciebie modułów
(use, require)--musisz o to zadbać samodzielnie. Zobacz podręcznik DB_File oraz moduł Config dla
interesujących implementacji tie().
tied ZMIENNA
Zwraca referencję do obiektu kryjącego się pod ZMIENNĄ (wartość, która była początkowo zwrócona
przez tie(), które powiązał zmienną z pakietem.) Gdy ZMIENNA nie jest powiązana, zwracana jest
wartość niezdefiniowana.
time Zwraca liczbę sekund od początku epoki (tj. na MacOs od 00:00:00, 1 Stycznia, 1904, a od 00:00:00
UTC, 1 Stycznia, 1970 dla większości innych systemów). Wystarczające do przekazania dla gmtime()
lub localtime().
times Zwraca czteroelementową tablicę, podającą w sekundach czasy użytkownika i systemu. Wartości są
dla tego procesu, oraz dla dzieci tego procesu.
($user,$system,$cuser,$csystem) = times;
tr/// Operator translacji. To samo co y///. Zobacz stronę perlop(1).
truncate UCHWYTPLIKU,DŁUGOŚĆ
truncate WYRAŻ,DŁUGOŚĆ
Skraca plik, otwarty na UCHWYCIEPLIKU lub nazwany przez WYRAŻ do podanej długości. Na systemach,
gdzie nie jest to zaimplementowane, powoduje błąd krytyczny.
uc WYRAŻ
uc Zwraca WYRAŻ w dużych literach. Jest to funkcja wewnętrzna, implementująca escape \U na
łańcuchach ujętych w podwójne cudzysłowy. Szanuje bieżące ustawienie LC_CTYPE, jeśli włączono
use locale. Zobacz podręcznik perllocale(1).
Jeśli WYRAŻ jest pominięte, używa $_.
ucfirst WYRAŻ
ucfirst Zwraca WYRAŻ, z pierwszym znakiem zmienionym na dużą literę. Jest to funkcja wewnętrzna,
implementująca escape \u na łańcuchach ujętych w cudzysłowy. Szanuje bieżące ustawienie
LC_CTYPE, jeśli włączono use locale. Zobacz podręcznik perllocale(1).
If EXPR is omitted, uses $_.
umask WYRAŻ
umask Ustawia umaskę procesu na WYRAŻ i zwraca wartość poprzednią. Jeśli WYRAŻ jest pominięte, po
prostu zwraca bieżącą umaskę. Pamiętaj, że umaska jest liczbą, zazwyczaj podawaną ósemkowo; nie
jest łańcuchem cyfr ósemkowych. Zobacz opis oct, znajdujący się gdzieś w tym dokumencie, jeśli
masz tylko łańcuch.
undef WYRAŻ
undef Powoduje, że wartość WYRAŻ, która musi być lwartością, staje się niezdefiniowana. Używaj tego
tylko na wartościach skalarnych, całej tablicy, całej tablicy asocjacyjnej, lub na nazwie
podprocedury (przy użyciu "&"). (Używanie tej funkcji w innych wypadkach przypuszczalnie nie
doprowadzi do takich rezultatów, jakich można by oczekiwać.) Zawsze zwraca wartość
niezdefiniowaną. Możesz pominąć WYRAŻ--w tym wypadku nic nie jest pozbawiane zdefiniowania, lecz
mimo to uzyskujesz wartość niezdefiniowaną, którą możesz np. zwrócić z podprocedury, przypisać
zmiennej,lub przekazać jako parametr. Przykłady:
undef $foo;
undef $bar{'blurfl'}; # Porównaj z: delete $bar{'blurfl'};
undef @ary;
undef %hash;
undef &mysub;
return (wantarray ? (undef, $errmsg) : undef) if $they_blew_it;
select undef, undef, undef, 0.25;
($a, $b, undef, $c) = &foo; # Ignoruj trzecią zwróconą wartość
unlink LISTA
unlink Kasuje listę plików. Zwraca liczbę skasowanych plików.
$cnt = unlink 'a', 'b', 'c';
unlink @goners;
unlink <*.bak>;
Uwaga: unlink nie skasuje katalogów, chyba że jesteś superużytkownikiem i przekazałeś perlowi
flagę -U. Nawet gdy te warunki są spełnione, bądź ostrzeżony, że skasowanie katalogu może wywołać
uszkodzenie systemu plików. Zamiast tego użyj rmdir.
Jeśli LISTA jest pominięta, używa $_.
unpack WZORZEC,WYRAŻ
Unpack robi odwrotność tego, co pack: pobiera łańcuch, reprezentujący strukturę i rozwija go na
listę wartości, zwracają wartość tablicową (w kontekście skalarnym zwraca tylko pierwszą wartość
tablicy). WZORZEC jest tego samego formatu co dla funkcji pack. Oto podprocedura, która dokonuje
substringu:
sub substr {
local($what,$where,$howmuch) = @_;
unpack("x$where a$howmuch", $what);
}
a potem mamy
sub ordinal { unpack("c",$_[0]); } # to samo co ord()
Dodatkowo, możesz poprzedzić pola %<liczbą>, wskazując, że chcesz <liczba>-bitową sumę
szesnastkową elementów, zamiast samych elementów. Domyślna jest suma 16-bitowa. Na przykład,
następujący przykład oblicza tę samą liczbę co program sum z Systemu V:
while (<>) {
$checksum += unpack("%16C*", $_);
}
$checksum %= 65536;
Następujący fragment efektywnie oblicza liczbę ustawionych bitów w wektorze bitowym:
$setbits = unpack("%32b*", $selectmask);
untie ZMIENNA
Rozbija powiązanie między zmienną, a pakietem. Zobacz tie().
unshift TABLICA,LISTA
Robi odwrotną rzecz do shift. Lub odwrotną do push, zależnie jak na to spojrzeć. Dokleja listę do
początku tablicy i zwraca nową liczbę elementów.
unshift(ARGV, '-e') unless $ARGV[0] =~ /^-/;
Zauważ, że LISTA jest doklejana cała, a nie jeden element naraz, więc doklejone elementy
pozostają w tej samej kolejności. Aby ją odwrócić, użyj reverse.
use Module LISTA
use Module
use Module WERSJA LISTA
use WERSJA
Importuje semantykę danego modułu do bieżącego pakietu. Ogólnie aliasuje określone podprocedury
lub nazwy zmiennych do twojego pakietu. Jest to dokładnie równoważne
BEGIN { require Module; import Module LIST; }
poza tym, że Module musi być gołym słowem.
Jeśli pierwszy argument use jest liczbą, to jest ona traktowana jako numer wersji, zamiast nazwa
modułu. Jeśli wersja interpretera perla jest mniejsza niż WERSJA, to wyświetlony zostanie
komunikat o błędzie, a perl natychmiast zakończy działanie. Jest to często przydatne, jeśli
chcesz sprawdzić wersję perla przed używaniem modułów bibliotecznych, które zmieniły się w sposób
niekompatybilny od czasu starszych wersji perla. (staramy się by tak nie było.)
Słowo BEGIN wymusza by require i import zaszły podczas kompilacji. Require zapewnia, że moduł
będzie załadowany do pamięci, jeśli wcześniej nie był. Import nie jest wbudowany--jest to tylko
zwykłe, statyczne wywołanie metody pakietu "Module" aby powiedzieć modułowi, by zaimportował
listę właściwości do pakietu bieżącego. Moduł może implementować swoją metodę import w dowolny
sposób, choć większość modułów woli wyprowadzać swoją metodę poprzez dziedziczenie z klasy
Exporter, zdefiniowanej w module Exporter, Zobacz podręcznik Exporter. Jeśli nie ma żadnej
metody importującej, to błąd jest cicho ignorowany. Może się to w przyszłych wersjach zmienić na
błąd krytyczny.
Jeśli nie chcesz zmieniania swojej przestrzeni nazw, załącz jawnie pustą listę:
use Module ();
Jest to dokładnie równoważne
BEGIN { require Module; }
Jeśli między Module, a LISTA jest obecny argument WERSJA, to use wywoła metodę VERSION klasy
Module z podaną wersją, jako argumentem. Domyślna metoda VERSION, dziedziczona z klasy Universal,
zakracze jeśli podana wersja jest większa niż wartość zmiennej $Module::VERSION. (Zauważ, że nie
ma przecinka po WERSJI!)
Ponieważ jest to szeroko otwarty interfejs, można tak implementować też pragmy (dyrektywy
kompilatora). Obecnie zaimplementowane pragmy to:
use integer;
use diagnostics;
use sigtrap qw(SEGV BUS);
use strict qw(subs vars refs);
use subs qw(afunc blurfl);
Te pseudo moduły importują semantykę do bieżącego zakresu bloku, w przeciwieństwie do zwykłych
modułów, które importują symbole do bieżącego pakietu.
Istnieje odpowiadająca komenda "no", która de-importuje rzeczy zaimportowane przez use, np.
wywołuje metodę unimport Module LISTA zamiast import.
no integer;
no strict 'refs';
Jeśli nie ma metody unimport, wywołanie to kończy się błędem krytycznym.
Dla listy standardowych modułów i pragm, zobacz podręcznik perlmod.
utime LISTA
Zmienia czasy dostępu i modyfikacji na każdym pliku z listy. Pierwsze dwa elementy listy muszą
być numerycznymi czasami dostępu i modyfikacji, dokładnie w tej kolejności. Zwraca liczbę plików,
na których operacja się powiodła. Czas modyfikacji inode jest ustawiany na czas bieżący. Przykład
komendy "touch":
#!/usr/bin/perl
$now = time;
utime $now, $now, @ARGV;
values HASH
Zwraca normalną tablicę, składającą się ze wszystkich wartości wymienionej tablicy asocjacyjnej.
W kontekście skalarnym, zwracana jest liczba wartości. Wartości są zwracane w dość losowej
kolejności, lecz jest ona ta sama, co zwracana przez funkcje keys() lub each(). Jako efekt
uboczny, funkcja resetuje iterator tablicy asocjacyjnej. Zobacz też keys(), each(), i sort().
vec WYRAŻ,OFFSET,BITY
Traktuje łańcuch WYRAŻ jako wektor całkowitych integerów i zwraca wartość pola bitowego,
wskazanego przez OFFSET. BITY podają liczbę bitów, które są zarezerwowane dla każdego wpisu w
wektorze bitowym. Musi to być potęga dwójki do 1 do 32. vec może też być przypisany do czegoś--w
tym wypadku potrzebne są nawiasy, aby nadać wyrażeniu właściwy priorytet, jak w
vec($image, $max_x * $x + $y, 8) = 3;
Wektory utworzone przez vec() mogą też być obsługiwane przez operatory logiczne ⎪, & i ^, które
założą, że bitowa operacja wektorowa jest oczekiwana gdy obydwa operandy są łańcuchami.
Aby przekształcić wektor bitowy na tablicę łańcuchową zer i jedynek, użyj:
$bits = unpack("b*", $vector);
@bits = split(//, unpack("b*", $vector));
Jeśli znasz dokładną długość w bitach, możesz podać ją zamiast *.
wait Czeka, aż proces potomny się nie zakończy i zwraca pid zamkniętego procesu, lub -1, jeśli go nie
było. Status jest zwracany w $?.
waitpid PID,FLAGI
Czeka, aż proces potomny się zakończy i zwraca pid zamkniętego procesu, lub -1, jeśli nie było
takiego procesu. Status jest zwracany w $?. Jeśli powiesz
use POSIX ":sys_wait_h";
...
waitpid(-1,&WNOHANG);
to możesz dokonać nieblokującego oczekiwania na dowolny proces. Nieblokujące oczekiwanie jest
dostępne na maszynach, obsługujących albo wywołanie waitpid(2), albo wait4(2). Jednak oczekiwanie
na konkretny pid z FLAGAMI wartości 0 jest zaimplementowane wszędzie. (Perl emuluje wywołanie
systemowe, pamiętając wartości statusu procesów, które zakończyły się, lecz nie były odczytane
przez skrypt perla)
wantarray
Zwraca TRUE, jeśli kontekst obecnie wykonywanej podprocedury szuka wartości listowej. Zwraca
FALSE, jeśli kontekst szuka skalara. Zwraca wartość niezdefiniowaną, jeśli kontekst nie szuka
wartości (void).
return unless defined wantarray; # nie myśl o robieniu więcej
my @a = complex_calculation();
return wantarray ? @a : "@a";
warn LIST
Produkuje komunikat na STDERR, podobnie jak die(), lecz nie wychodzi i nie wyrzuca wyjątku.
Jeśli zainstalowany jest handler $SIG{__WARN__), nie są drukowane żadne komunikaty. Od handlera
zależy obsługa komunikatu, gdy tak zadecyduje (np. przekonwertowanie go na die()). Większość
handlerów musi więc wywoływać warn() ponownie, aby wyświetlić komunikat. Zauważ, że jest to
bezpieczne i nie spowoduje nieskończonej pętli, gdyż haki __WARN__ nie są wołane z niego samego.
Zachowanie to jest trochę inne od tego dla $SIG{__DIE__} (które nie powstrzymywały tekstu
komunikatów, lecz mogły wywołać die() ponownie, aby je zmienić).
Używanie handlerów __WARN__ daje potężne narzędzie do wyciszania wszystkich ostrzeżeń (nawet tak
zwanych obowiązkowych). Na przykład:
# wywal wszystkie ostrzeżenia czasu kompilacji
BEGIN { $SIG{'__WARN__'} = sub { warn $_[0] if $DOWARN } }
my $foo = 10;
my $foo = 20; # bez ostrzegania o zduplikowaniu my $foo
# lecz przecież sam się o to prosiłeś!
# bez ostrzeżeń czasu kompilacji i czasu działania przed tym miejscem
$DOWARN = 1;
# ostrzeżenia czasu działania są tu włączone
warn "\$foo is alive and $foo!"; # pojawia się
Zobacz stronę perlvar(1) dla szczegółów o ustawianiu wpisów %SIG i dla przykładów.
write UCHWYTPLIKU
write WYRAŻ
write Zapisuje sformatowany rekord (prawdopodobnie wieloliniowy) do podanego pliku, używając formatu
związanego z tym plikiem. Domyślnie format dla pliku jest tym, który ma tę samą nazwę, co uchwyt
pliku, lecz można go zmienić z pomocą funkcji select(), przypisując nazwę formatu zmiennej $~.
Początek przetwarzania formy jest obsługiwany automatycznie: jeśli nie ma miejsca na stronie na
sformatowany rekord, to strona jest przewijana przez wpisanie form feed, następnie używany jest
specjalny format góry-strony (do formatowania nagłówka nowej strony), a potem wpisany jest
rekord. Domyślnie, format góry-strony jest nazwą uchwytu pliku z dodanym "_TOP", lecz można go
ustawić dynamicznie, przyznając zmiennej $^ nazwę podczas gdy wybrany (select) jest uchwyt pliku.
Liczba pozostających linii bieżącej strony znajduje się w zmiennej $- i może być ustawiona na 0
aby wymusić nową stronę.
Jeśli UCHWYTPLIKU nie jest podany, wyjście idzie do bieżącego domyślnego kanału wyjścia, którym
jest początkowo STDOUT, a który może być zmieniony operatorem select. Jeśli UCHWYTPLIKU jest
wyrażeniem WYRAŻ, to jest ono analizowane, a wynikowy łańcuch jest używany do podejrzenia nazwy
UCHWYTUPLIKU. Dla dalszych informacji o formatach, zobacz stronę perlform(1).
Zauważ, że zapis NIE jest odwrotnością odczytu. Niestety.
y/// Operator translacji. To samo co tr///. Zobacz stronę perlop(1).
INFORMACJE O TŁUMACZENIU
Powyższe tłumaczenie pochodzi z nieistniejącego już Projektu Tłumaczenia Manuali i może nie być aktualne.
W razie zauważenia różnic między powyższym opisem a rzeczywistym zachowaniem opisywanego programu lub
funkcji, prosimy o zapoznanie się z oryginalną (angielską) wersją strony podręcznika za pomocą polecenia:
man --locale=C 1 perlfunc
Prosimy o pomoc w aktualizacji stron man - więcej informacji można znaleźć pod adresem
http://sourceforge.net/projects/manpages-pl/.
3rd Berkeley Distribution perl 5.004, patch 01 PERLFUNC(1)