Beépített függvények

A függvények, amelyek ebben a fejezetben le vannak írva kifejezésekben használhatók. Két fő kategóriába lehet őket sorolni: vannak lista operátorok és unáris operátorok. A lényegi különbség ezek között abban van, hogy míg egy unáris operátor pontosan egy argumentumot dolgoz fel, és így az argumentuma véget ér legkésőbb a következő vesszőnél, addig a lista operátorok esetében a vessző csupán az argumentumokat választja el.

Az unáris operátorok általában skalár környezetet nyújtanak az argumentumuknak, míg a lista operátorok skalár vagy lista környezetet nyújtanak. Ha mind a kettőt nyújtanak, akkor a skalár argumentumok mindig megelőzik a lista argumentumot, mivel mindig csak egy lista argumentum lehet. Például a splice függvény három skalár és egy lista argumentummal dolgozik.

A következő szintaxis leírásban azok a helyek, ahol a lista operátorok lista környezetet nyújtanak az argumentumaik számára LIST kulcsszóval esznek jelölve. Az ilyen listák tartalmazhatnak skalár argumentumokat vesszőkkel elválasztva, és listákat, amelyeket a Perl egyszerűen befűz a listába minden egyes elemükkel, egyre hosszabb listát előállítva. A LIST minden eleme vesszővel van elválasztva.

Bármelyik függvény, amelyet itt felsorolunk használható az argumentumait bezáró zárójellel, vagy anélkül. (A szintakszis leírásban nem használunk zárójeleket.) Ha használunk zárójeleket, akkor a nagyon egyszerű szabály szerint: ha függvénynek látszik, akkor függvény és a precedencia nem számít. Egyéb esetekben unáris, vagy lista operátor és az operátor precedenciák számítanak. A közök (szóköz, tab, újsor) a függvény neve és a paraméterek körüli nyitózárójel között nem számít, ezért néha igencsak érdemes óvatosnak lenni:

print 1+2+3;        # eredmény 6.
print(1+2) + 3;     # eredmény 3.
print (1+2)+3;      # szintén 3!
print +(1+2)+3;     # eredmény 6.
print ((1+2)+3);    # eredmény 6.

és a kimenet:
63366

Ha a Perl értelmezőt a -w opcióval futtatod, akkor ezekre a dolgokra figyelmeztet.

Azon függvények esetében, amelyek skalár és lista környezetben is használhatóak ha olyan hiba történik, amelyik miatt a program futásának nem kell megszakadnia nem definiált érték undef illetve nulla hosszúságú lista a visszatérési érték.

A következő szabály örökérvényű:

NINCS ÁLTALÁNOS SZABÁLY A LISTÁK SKALÁRRA VALÓ KONVERZIÓJÁRA!

Minden egyes operátor és függvény, amelyik listát szeretne visszaadni, de skalár környezetben lett meghívva maga dönt arról, hogy melyik konverziós lehetőség a legmegfelelőbb. Néhány operátor annak a listának a hosszát adja vissza, amelyiket lista környezetben adott volna vissza. Más operátorok a lista első elemét adják eredményül. Megint más operátorok a lista utolsó elemét adják vissza. Ismét mások a sikeresen végrehajtott műveletek számát adják. Általánosságban azt az értéket adják vissza, amelyikre általában a leginkább szükséged van, kivéve ha egyformaságra van szükséged.

Perl függvények kategória szerint

Itt vannak a Perl függvények kategória szerint, és néhány olyan dolog is, amelyik nem függvény, de annak látszik, mint néhány Perl kulcsszó és operátor. Néhány függvény több helyen is előfordul.

Függvények skalárok és füzérek kezelésére
chomp, chop, chr, crypt, hex, index, lc, lcfirst, length, oct, ord, pack, q/STRING/, qq/STRING/, reverse, rindex, sprintf, substr, tr///, uc, ucfirst, y///

Reguláris kifejezések és mintaillesztés
m//, pos, quotemeta, s///, split, study

Numerikus függvények
abs, atan2, cos, exp, hex, int, log, oct, rand, sin, sqrt, srand

Függvények igazi @TÖMB-ökhöz
pop, push, shift, splice, unshift

Függvények listákhoz
grep, join, map, qw/STRING/, reverse, sort, unpack

Függvények igazi %HASH-ekhez
delete, each, exists, keys, values

Input és output függvények
binmode, close, closedir, dbmclose, dbmopen, die, eof, fileno, flock, format, getc, print, printf, read, readdir, rewinddir, seek, seekdir, select, syscall, sysread, syswrite, tell, telldir, truncate, warn, write

Függvények fix hosszúságú adat rekordokhoz
pack, read, syscall, sysread, syswrite, unpack, vec

Függvények fájl kezelőkhöz (handle) és könyvtárakhoz
-X , chdir, chmod, chown, chroot, fcntl, glob, ioctl, link, lstat, mkdir, open, opendir, readlink, rename, rmdir, stat, symlink, umask, unlink, utime

Kulcsszavak, és programvezérlés
caller, continue, die, do, dump, eval, exit, goto, last, next, redo, return, sub, wantarray

Kulcsszavak
caller, import, local, my, package, use

Vegyes függvények
defined, dump, eval, formline, local, my, reset, scalar, undef, wantarray

Processzekhez és processz csoportokhoz
alarm, exec, fork, getpgrp, getppid, getpriority, kill, pipe, qx/STRING/, setpgrp, setpriority, sleep, system, times, wait, waitpid

Perl modul kulcsszavak
do, import, no, package, require, use

Osztályok és objektum orientált kulcsszavak
bless, dbmclose, dbmopen, package, ref, tie, tied, untie, use

Alacsonyszintű socket függvények
accept, bind, connect, getpeername, getsockname, getsockopt, listen, recv, send, setsockopt, shutdown, socket, socketpair

System V processzek közötti kommunikációs függvények
msgctl, msgget, msgrcv, msgsnd, semctl, semget, semop, shmctl, shmget, shmread, shmwrite

Felhasználói és csoport információs függvények
endgrent, endhostent, endnetent, endpwent, getgrent, getgrgid, getgrnam, getlogin, getpwent, getpwnam, getpwuid, setgrent, setpwent

Hálózati információs függvények
endprotoent, endservent, gethostbyaddr, gethostbyname, gethostent, getnetbyaddr, getnetbyname, getnetent, getprotobyname, getprotobynumber, getprotoent, getservbyname, getservbyport, getservent, sethostent, setnetent, setprotoent, setservent

Időhöz kapcsolódó függvények
gmtime, localtime, time, times

A Perl5-ben új függvények
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 a Perl4 változatában kulcsszó volt, de a Perl5-ben operátor, amely kifejezésekben használható.

Perl5-ben aktualitásukat vesztett függvények
dbmclose, dbmopen

A Perl függvények ABC sorrendben

-X FILEHANDLE

-X EXPRESSION

-X
Általában fájl teszt, amelyben az X valamelyik betű az alábbi felsorolásból. Ez az unáris operátor egy argumentumot fogad (ezért unáris) amelyik egy fájlkezelő vagy a fájl neve, és megnézi, hogy a betűhöz rendelt állítás igaz-e. Ha az argumentum hiányzik, akkor automatikusan a $_ változót veszi figyelembe a program kivéve a -t esetet, amelyik ilyen esetben a szabványos bemenetre STDIN vonatkozik. Amennyiben más nincs definiálva az operátor az 1 értéket adja vissza igaz esetben, a '' értéket hamis esetben és undef értéket ha a fájl nem létezik. A furcsa név ellenére ugyanazok a precedencia szabályok vonatkoznak erre az oprátorra, mint bármely más unáris operátorra, és az argumentumok ugyann úgy zárójelezhetőek. Az operátorok listája:

-ra fájl olvasható az aktuális felhasználó által. (effective uid,gid)
-wa fájl írható az aktuális felhasználó által. (effective uid,gid)
-xa fájl végrehajtható az aktuális felhasználó által. (effective uid,gid)
-oa fájl az aktuális felhasználó tulajdona. (effective uid,gid)
-Ra fájl olvasható a valódi felhasználó által. (real uid,gid).
-Wa fájl írható az aktuális felhasználó által. (real uid,gid).
-Xa fájl végrehajtható az aktuális felhasználó által (real uid,gid).
-Oa fájl az aktuális felhasználó tulajdona. (real uid,gid)
-ea fájl létezik
-za fájl nulla hosszú
-sa fájl nem nulla hosszú. Visszatérési érték a bájtok száma.
-fa fájl egyszerű fájl.
-da fájl könyvtár
-la fájl szimbólikus link.
-pa fájl egy megnevezett csatorna
-Sa fájl egy socket.
-ba fájl block special fájl.
-ca fájl karakter speciális fájl.
-ta fájlkezelő egy tty-hoz (terminál) nyitott
-ua fájl setuid bitje be val állítva
-ga fájl setgid bitje be van állítva
-ka fájl sticky bitje be van állítva
-Ta fájl szöveges fájl.
-Ba fájl bináris (-T ellentéte).
-Ma fájl kora napokban a Perl script indulásakor.
-Augyanez, de a legutolsó hozzáférési időt figyelembe véve
-Cugyanez de inode változási időre

A fájlhozzáférési operátorok, mint a -r, -R, -w, -W, -x és -X kizárólag csak a hozzáférési engedélyeket vizsgálják, ezen kívül még igen sok oka lehet annak, ha a program nem tudja például írni az egyik fájlt (például betelt a diszk). Ugyanakkor a superuser számára a -r, -R, -w és -W mindig 1-et ad vissza értékként, -x és -X 1-et ad vissza értékként ha bármelyik végrehajtási bit be van billentve. Így azok a programok, amelyeket a superuser futtat a stat függvényt kell, hogy használják, hogy a fájlok valódi módját megkapják, vagy a felhasználói azonosítót (uid) kell erre az időre átállítani.

Példa:

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

Megjegyzendő, hogy -s/a/b/ nem egy string csere mínusz egyszerese, hanem fájl méretre való hivatkozás, osztva a-val és b-vel. Ugyanakkor -exp $foo úgy működik, ahogy várjuk, mert csak az egybetűs operátorokat kezeli a Perl fájl tesztként.

A -T és -B kapcsolók a következőképpen működnek. A fájl első blokkját vizsgálja meg a rendszer, és keres bűvös kontrol kódokat, illetve olyan karaktereket, amelyeknek a legfelső bitje 1. Ha több mint 30% ilyen karaktert talál, akkor a fájl -B különben -T. Bármilyen fájl, amelyik nulla értékű karaktert tartalmaz az első blokkban bináris fájl. Ha ezen kapcsolókat fájlkezelőkre alkalmazzuk, akkor a beolvasott puffert vizsgálja meg a rendszer az első blokk helyett. Mind a két kapcsoló igaz értéket ad vissza nulla fájlon, illetve ha olyan fájlkezelővel hívják meg, amely EOF-on áll.

Mivel a -T és -B opciókhoz a fájl olvasása szükséges, azért érdemes a fájlt először a -f operátorral megvizsgálni, mint a next unless -f $file && -T $file.

Ha bármelyik fájl vizsgálat, beleértve a stat és lstat operátorokat is fájlkezelő, vagy fájlnév helyett magában álló aláhúzás karaktert kap argumentumként, akkor az utolsó megvizsgált fájlra adja az eredményt. Ezzel egy rendszerhívást megspórol a rendszer. (Kivéve a -t kapcsolót, és az is megjegyzendő, hogy a lstat és -l a szimólikus link és nem a valódi fájl adatait hagyja a stat struktúrában. Például:

    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 VALUE
Az argumentum abszolút értékét adja vissza.

accept NEWSOCKET,GENERICSOCKET
Elfogad egy bejövő socket kapcsolatot, ahogy az accept(2) rendszerhívás teszi. A packet címet adja vissza siker esetén, FALSE értéket egyébként.

alarm SECONDS
Gondoskodik róla, hogy a paraméterként megadott számú másodperc múlva egy alarmot kapjon a processz. (Néhány gépen egy másodperccel hamarabb.) Egyszerre csak egy számláló működhet. Minden egyes hívás a korábbi hívások hatását törli, és ha 0 argumentummal hívjuk meg a függvényt, akkor minden egyes korábbi hívás hatását törli újabb alarm előjegyzése nélkül. A visszatérési érték az előző alarmig tartó idő.

Ennél nagyobb pontosságú időállításhoz a Perl syscall felületét lehet használni a setitimer(2) rendszerfüggvényhez, ha a rendszer ezt támogatja, vagy a select függvényt. Nem ajánlott az alarm és sleep hívások keverése.

atan2 Y,X
Y/X arcus tangense -PI és PI között.

bind SOCKET,NAME
Hozzáköt egy hálózati címet egy sockethez, mint ahogy azt a bind rendszerhívás teszi. TRUE értéket ad vissza siker esetén és FALSE értéket hiba esetén. A NAME egy a socketnek megfelelő packet cím kell, hogy legyen.

binmode FILEHANDLE
A fájlt íráshoz és olvasáshoz bináris módba állítja minden olyan operációs rendszeren amelyik különbséget tesz bináris és szöveges fájlok között. A szöveges fájloknál a bemeneten a CR LF karakterek LF karakterekké konvertálódnak, és a kimeneten fordítva. binmode nincs hatással semmire UNIX alatt, de DOS, Windows, Windows95, WindowsNT és más modern operációs rendszereken kötelező használni, ellenkező esetben igen érdekes eredményeket adhat a rendszer.

Gyakorlatilag a UNIX kivételével minden rendszeren szükséges ennek a függvénynek a megfelelő használata.

Ha FILEHANDLE egy kifejezés, akkor ennek az értékét használja a rendszer, mint a fájlkezelő nevét.

bless REF,CLASSNAME

bless REF
Ez a függvény megmondja a hivatkozott objektumnak (REF), hogy a CLASSNAME csomaghoz tartozik, illetve az aktuális csomaghoz, ha CLASSNAME nincs megadva. A kényelem kedvéért a visszatérési érték az objektumhoz valóü referencia, mivel a bless meghívása gyakran egy objektum összeállítás utolsó lépése.

Mindig a kétargumentumos változatot használd, ha olyan konstruktor eljárást írsz, amelyik örökölhető.

caller EXPRESSION

caller
Az aktuális szubrutinhívás környezetét adja vissza. Skalár környezetben TRUE értéket ad vissza, ha van hívó, azaz ha szubrutinban vagyunk, vagy eval vagy require környezetben, FALSE értéket egyébként. Lista környezetben a visszatérési érték
($package, $filename, $line) = caller;

Ha EXPRESSION is meg van adva, akkor néhány olyan extra információt is visszaad, amelyet a debugger használ. EXPRESSION értéke mondja meg, hogy hány hívási keretet menjen vissza az aktuálishoz viszonyítva.

($package, $filename, $line,
     $subroutine, $hasargs, $wantargs) = caller($i);

Amikor a DB csomagon belül kerül meghívásra még további részletes információ is kiértékelődik, nevezetesen a @DB::args listába bekerül a szubrutin argumentumainak a listája.

chdir EXPRESSION
Megváltoztatja a munkakönyvtárat EXPRESSION-re, ha lehetséges. Ha EXPRESSION hiányzik, akkor a home könyvtárba megy. A visszatérési értéke TRUE siker esetén, egyébként FALSE. Egy példa olvasható a die függvény magyarázatánál.

chmod LIST
A hozzáférési engedélyeket változtatja meg fájlok listájára. A lista első eleme numerikus kód kell, hogy legyen, amely általában oktális. A visszatérési érték azon fájloknak a száma, ahol sikeres volt az érték beállítás.
$cnt = chmod 0755, 'foo', 'bar';
chmod 0755, @executables;

chomp VARIABLE

chomp LIST

chomp
Ez valamelyest biztonságosabb változata a chop függvénynek. Leveszi a sorvégződést, amely megfelel a $/ változóértékének. (Ez a változó $INPUT_RECORD_SEPARATOR néven is ismert az English modullal.) A levett karakterek számát adja meg. Igen gyakran használható abban az esetben, mikor a sorok végéről kell leszedni az újsor karaktert, de félsz attól, hogy az utolsó sor esetleg nincs újsor karakterrel lezárva. Ha változó nincs megadva, akkor $_ végéről veszi le az újsor karaktert. Ha paraméterként lista van megadva, akkor a lista minden egyes elemére hajtja végre a sorvégjel eltávolítást.
open(F,"<input.txt");
@q = <>;
close F;
chomp @q;

A chomp függvény bármire használható, ami balérték, így akár egy értékadásra is.

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

chop VARIABLE

chop LIST

chop
Levágja a paraméterként megadott füzér utolsó karakterét, és visszaadja visszatérési értékként. Elsődleges felhasználása a sor végéről az újsor karakter leszedése, de sokkal hatékonyabb, mint a s/\n// mert se nem nézi végig, se nem másolja át a füzért. Ha a változó hiányzik, akkor $_ változót használja.
while (<>) {
    chop;   # avoid \n on last field
    @array = split(/:/);
    ...
}

Mindenre alkalmazható a függvény, ami balérték, így értékadáshoz is.
chop($cwd = `pwd`);
chop($answer = <STDIN>);

Ha argumentumként lista van megadva, akkor a lista minden egyes elemére alkalmazza az utolsó karakter levágást, de csak a legutolsó levágott karaktert adja vissza.

A chop a füzér utolsó karakterét adja vissza. A többi karakter visszaadása, azaz minden karakter kivéve az utolsót a substr($string, 0, -1) függvénnyel lehetséges.

chown LIST
Kicseréli a fájlok tulajdonosát és csoportját. A LIST első két eleme a NUMERIKUS uid és gid ebben a sorrendben. A további elemek a fájlok nevei. A visszaadott érték a sikeresen végrehajtott műveletek száma.

A legtöbb rendszeren ez a parancs csak superuser jogosultsággal hajtható végre, de elképzelhető, hogy mások számára is engedélyezett a parancs végrehajtása olyan esetben, amikor a fájl tulajdonosa csak a csoporthoz tartozást akarja kicserélni valamely másodlagos csoportra.

chr NUMBER
Visszatérési értéke az a karakter, amelynek a numerikus kódját paraméterként megadtuk. Például chr(65) értéke ``A'' ASCII kódtábla esetén.

chroot FILENAME
Ez a függvény úgy működik, mint a UNIX rendszerhívás: a paraméterként megadott könyvtár lesz minden további ``/'' jellel kezdődő fájlhivatkozás számára a gyökérkönyvtár a pillanatnyi és a gyerek processzek számára. (Az aktuális könyvtár eközben nem változik.) Biztonsági okokból ez a függvény csak a superuser számára elérhető. Ha a FILENAME nincs megadva, akkor $_-t használja a rendszer.

close FILEHANDLE
Bezárja a csövet, fagy fájlt, amelyhez a fájlkezelő (handle) rendelve van. A visszatérési érték TRUE, ha a bezárás sikeres volt, a pufferek ki lettek ürítve, és fájlleíró le lett zárva. Nincs szükség a fájl lezárására, ha azt rögtön követi egy ugyanarra a fájlkezelőre hivatkozó open, mivel az open lezárja a fájlt.

Annyi különbség van, hogy az explicit módon végrehajtott fájl lezárás lenullázza a sorszámlálót $., míg az open által végrehajtott implicit lezárás nem.

Hasonlóan, ha egy csőhöz rendelt fájlkezelőt explicit módon lezár a program, akkor a várni fog a processz lefutására, és a $? változó értékét is beállítja a processz befejezési értékére.

open(OUTPUT, '|sort >foo'); # cső a sort programhoz
...                         # nyomtatás a csőbe
close OUTPUT;               # megvárja amíg a rendezés befejeződik
open(INPUT, 'foo');         # elkezdjük beolvasni az eredményt

(Persze ennél van hatékonyabb rendezési lehetőség is.)

A FILEHANDLE lehet egy kifejezés is, amelyik a fájlkezelő nevét adja meg.

closedir DIRHANDLE
Bezár egy könyvtárat, amelyet a opendir-rel nyitottunk meg.

connect SOCKET,NAME
Megpróbál kapcsolódni egy távoli socket-hez, éppen úgy, ahogy a connect rendszerhívás teszi. Visszatérési értéke TRUE ha sikeres volt, és FALSE egyébként. A NAME egy csomag cím kell, hogy legyen amelyik a socket-nek megfelel.

continue BLOCK
Ez igazából nem egy függvény, hanem egy programvezérlési kulcsszó. Ha egy BLOCK-hoz csatlakozik egy continue BLOCK, akkor ez mindig végrehajtódik, mielőtt a feltételt kiértékelné a program. Így ebbe a BLOCK-ba lehet elhelyezni azokat a programrészleteket, amelyeket akkor is végre kell hajtani, ha a ciklust a next utasítás indítja újra.

cos EXPRESSION
A kifejezés radiánban értelmezett érékéhez rendelt koszinusz értéket adja vissza. Ha a kifejezés hiányzik, akkor a $_ értékét használja.
crypt PLAINTEXT,SALT
Kódolja a PLAINTEXT füzért, pontosan úgy, ahogy a crypt C függvény feltéve, hogy a rendszeren implementálták a függvényt, és nem vették ki, mint potenciális muníciót.

Ez a függvény használható a password fájl ellenőrzésére, például azért, hogy a rendszergazda ellenőrizze, hogy a felhasználók kellően bonyolult jelszót választottak.

Egy kódrészlet, amelyik ellenőrzi, hogy aki a kódot futtatja tudja a saját UNIX jelszavát:

$pwd = (getpwuid($<))[1];
$salt = substr($pwd, 0, 2);
system "stty -echo";
print "Password: ";
chop($word = <STDIN>);
print "\n";
system "stty echo";
if (crypt($word, $salt) ne $pwd) {
    die "Sorry...\n";
} else {
    print "ok\n";
} 


Természetesen a kulcsszavunkat megadni ismeretleneknek rettentő butaság, még akkor is ha ez az ismeretlen csupán egy program.
dbmclose ASSOC_ARRAY
[Ez a függvény elavult, ehelyett a tie függvény használandó.]

Megszünteti a kapcsolatot a DBM fájl és a hozzá rendelt tördelőtábla között.

dbmopen ASSOC,DBNAME,MODE
[Ez a függvény elavult, helyette a tie használandó.]

Ez a függvény hozzárendeli egy dbm(3), ndbm(3), sdbm(3), gdbm(), vagy Berkeley DB fájlt egy tördelőtáblához. ASSOC a tördelőtábla neve. Ellentétben a szokásos open függvénnyel az első argumentum nem fájl kezelő, hanem asszociatív tömb, vagy másnéven tördelőtábla. A második argumentum a fájl neve kiterjesztés nélkül. Ha a fájl nem létezik, akkor a program létrehozza a fájlt a harmadik paraméterként megadott hozzáférési MODE beállításával. (Ez az umask függvénnyel állítható.)

Ha a rendszer csak a régebbi fajta DBM függvényeket támogatja, akkor egy program csak egy dbmopen utasítást hajthat végre. A Perl régebbi verzióiban, ha a rendszeren nem volt sem DBM sem pedig ndbm, a dbmopen hívása hibát generált. Jelenleg ebben az esetben sdbm(3) kerül használatra.

Ha a DBM fájlhoz csak hozzáférési joga van a programnak, akkor csak olvasni fogja tudni a tördelőtábla egyes elemeit, de értéket nem adhat nekik. Ha tesztelni akarod, hogy tudod-e írni a fájlt, akkor használhatók a fájl tesztek, illetve meg lehet próbálni értéket adni a tábla egy elemének egy eval blokkon belül, amely megfogja a hibát.

Megjegyzendő, hogy az olyan függvények, mint a keys vagy values igen nagy tömböket adhatnak vissza amikor nagyméretű DBM fájlhoz rendelt tördelőtáblára alkalmazzák őket. Ehelyett inkább a each függvényt kell használni.

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

defined EXPRESSION
Egy logikai értéket ad vissza annak megfelelően, hogy a kifejezésnek van-e "igazi" értéke vagy nem. Sok operátor és függvény hiba esetén a undef, azaz nem definiált értéket adja vissza valamilyen hiba esetén. Ez a függvény lehetővé teszi például azt, hogy különbséget tegyünk a nulla karaktert tartalmazó és a nem definiált füzér között. A függvény használható arra is, hogy tömbök, vagy szubrutinok létét ellenőrizzük.

A tördelőtáblák esetén ellenőrizhető, hogy a tördelő tábla megfelelő eleme definiált-e. Előfordulhat, hogy a tördelőtábla eleme létezik, de értéke undef ezért annak ellenőrzése, hogy a tördelőtábla eleme létezik-e precízebben vizsgálható a exists függvénnyel.

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

Az undef függvény tartozik ehhez a témához.

Megjegyzés:

Sokan használják a defined függvényt feleslegesen. Például a

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

esetében a hasonlítás sikeres, és $1 értéke definiált, annak ellenére, hogy az értéke semmi, azaz nulla hosszúságú füzér. Pontosan fogalmazva, nem az az igaz, hogy $1 semminek sem felel meg a hasonlításban, hanem az, hogy $1 a semminek felel meg.

delete EXPRESSION
Törli a megadott értéket egy tördelő táblából. A visszatérési érték a törölt érték, vagy undef ha semmit nem törölt a rendszer. A %ENV tördelőtáblából való törlés módosítja a környezetet. Olyan tördelőtáblából való törlés, amely valamilyen DBM fájlhoz van kötve törli az elemet a tördelőtáblából. (Ugyanakkor a törlés valamilyen tie tördelőtáblából nem feltétlenül ad vissza valamilyen értéket.)

A következő programrészlet az %ARRAY tördelőtábla összes elemét törli:

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

(Bár gyorsabb lenne az undef használata.)

Az EXPRESSION kifejezés értéke bármi lehet feltéve, hogy az utolsó művelet efy tördelőtábla indexelés, például:

delete $ref->[$x][$y]{$key};


die EXPRESSION
Egy eval-on kívül kiírja a EXPRESSION tartalmát a STDERR-re (hibakimenet, általában a képernyő), és a program kilép $! hibakóddal. Ha $! értéke nulla, akkor processz kiszállási érték ($? >> 8). Ha ez az érték is nulla, akkor a kiszállási érték 255.

eval kiértékelésen belül a die hatására az eval blokk nem értékelődik ki tovább, az értéke undef és az üzenet a $@ változóba kerül. Ezzel lehetőség nyílik arra, hogy die függvény kivételt okozzon.

Egyenrangú példák:

die "Can't cd to spool: $!\n" unless chdir '/usr/spool/news';
chdir '/usr/spool/news' or die "Can't cd to spool: $!\n" 


Ha az EXPRESSION kifejezés végén nincs újsor karakter, akkor a program aktuális sorszámlálója és a bemeneti rekord számláló is hozzáadódik füzérhez.

Lásd még az exit és warn függvényeket.

do BLOCK
Nem teljesen függvény. Végrehajtódik a BLOCK és a visszatérési érték a BOCK utolsó végrehajtott utasításának értéke. Ha egy ciklusmódosító van a végén, akkor olyan ciklust lehet létrehozni, amelyet legalább egyszer végrehajt a program.
do SUBROUTINE(LIST)
Ez régi, és nem használandó formája a szubrutinhívásnak.

do EXPRESSION
Az EXPRESSION kifejezés értékét, mint fájlnevet értelmezi, és a fájl tartalmát, mint Perl scriptet végrehajtja. Az elsődleges felhasználási terület szubrutinok beemelése a Perl könyvtárakból.

A következő két példa egyenértékű:

do 'stat.pl';

és
eval `cat stat.pl`;


kivéve, hogy az első megoldás hatékonyabb, érthetőbb, kevésbé rendszerfüggő, figyelembe veszi az aktuális program fájlnevet a hibajelzések számára, és végigkeresi az összes -I könyvtárak a fájl megtalálásához, ha a fájl nem található meg az aktuális könyvtárban. Abban viszont teljes egészében megegyezik a két megoldás, hogy mind a kettő minden egyes alkalommal beolvassa, és a Perl interpreter értelmezi a parancsokat valahányszor az utasítás végrehajtódik, így feltehetőleg nem akarod majd végrehajtani egy ciklus belsejében.

A könyvtári függvények beemelésére sokkal jobb módszer a use és require operátorok használata.

dump LABEL
Ez az utasítás egy azonnali dump-ot hajt végre, azaz megállítja a processzt, és egy olyan bináris fájlt hoz létre, amelyik tartalmazza a processz egész memóriaterületének tartalmát. Ennek az lehet az értelme, hogy UNIX rendszereken az undump programmal ebből a fájlból végrehajtható bináris állományt lehet létrehozni, amelyet elindítva a program a dump utasítás utáni LABEL által meghatározott utasítással folytatódik. Ilyenkor a program első utasítása a goto LABEL minden olyan megkötéssel, amely vonatkozik a goto-ra általában. Úgy lehet elképzelni az egészet, mint egy olyan goto utasítást, amely végrehajtása közben a program meghal és azután feltámad. Minden olyan változó, amelyet a program beállított megőrzi az értékét, ugyanakkor azok a fájlok, amelyek meg voltak nyitva nem lesznek megnyitva a program újraindulásakor, és ez megzavarhatja a Perl rendszert is.

Példa:

#!/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 ASSOC_ARRAY
Lista környezetben meghívva egy kételemű listát ad vissza, amely a tördelőtábla következő kulcsát, és a kulcshoz rendelt értéket adja vissza, így végig lehet menni a tábla összes elemén. Skaláris környezetben meghívva csak a következő elem kulcsát adja vissza. Az egyes elemek sorrendje nem meghatározott, és nagyban függ attól, hogy az adott Perl implementáció milyen sorrendben tárolja az egyes elemeket. Amikor már nincsen több elem nulla listát ad vissza a függvény lista környezetben, és undef értéket skaláris környezetben. Ezután a következő each hívás újra az első elemtől kezdi az iterációt. Az iteráció újraindítása csak úgy lehetséges, ha minden egyes elemen végigmegyünk. Az iteráció közben nem szabad a tördelőtáblához elemeket hozzáadni. Minden tördelőtáblához csak egy iteráló változó tartozik, és ezt használja mind a each, mind a keys, mind pedig a values függvény. A következő programdarab a környezeti változókat írja ki:
while (($key,$value) = each %ENV) {
   print "$key=$value\n";
}



Nézd még meg a keys és values függvényeket.
eof FILEHANDLE

eof ()

eof
1-et ad visszatérési értékként ha a következő FILEHANDLE-ra vonatkozó olvasás fájlvégéhez érne, vagy ha nincs a FILEHANDLE fájlkezelőhöz nyitott fájl. FILEHANDLE lehet egy kifejezés, amely ebben az esetben a fájlkezelő nevét adja meg.

Megjegyzendő, hogy ez a függvény egy karaktert olvas a fájlból, majd az ungetc C függvénnyel visszarakja az értéket. Az eof használata terminál fájlon, vagy az abból való olvasás hatására a terminál féjl elvesztheti a fájlvégjelet.

Ha nem adunk meg argumentumot az eof függvénynek, akkor azt a fájlkezelőt használja amelyet legutoljára használt olvasási utasítás. Az üres zárójelek () használata azokra a peszeudo fájlokra vonatkozik, amelyeket a parancssorban adtunk meg, így az eof() használható egy while(<>) ciklusban az utolsó fájl végének ellenőrzésére. A eof(ARGV)-t kell használni ha minden egyes fájl végét tesztelni akarjuk. Példák:

# lenullázza a sorszámozást minden új fájl előtt
while (<>) {
   print "$.\t$_";
   close(ARGV) if (eof);   # Nem eof()
}



és
# mínuszjeleket szúr be az utolsó fájl utolsó sora elé
while (<>) {
    if (eof()) {
        print "--------------\n";
        close(ARGV);        # close vagy break; szükséges, ha a
                            # terminálrólolvasunk
    }
    print;
}



Gyakorlatilag soha nincs szükség Perl-ben az eof használatára, mert a beolvasó függvények visszatérési értéke undef ha kifutnak a beolvasható értékekből.
eval EXPRESSION

eval BLOCK
EXPRESSION értelmezésre és végrehajtásra kerül, úgy, mintha egy kis Perl program lenne. A végrehajtás abban a környezetben történik, amelyben a pillanatnyi futás van, így minden szubrutin definíció, változóérték használható. A visszatérési érték az utolsó végrehajtott utasítás értéke, vagy a return utasítás értéke, amely éppúgy használható, mint a szubrutinok esetében.

Ha szintaktikus hiba van a programrészletben, futási hiba történik, vagy egy die utasítást hajt végre a program, akkor undef értéket ad vissza a függvény és $@ tartalmazza a hibaüzenetet. Ha nem történthiba, akkor $@ garantáltan nulla hosszúságú füzér. Ha az argumentumként megadott EXPRESSION nincs megadva, akkor a függvény $_-t használja. Az utolsó pontosvessző hiányozhat a kifejezésből.

Mivel a eval függvény elfogja az egyébként végzetes hibákat, még a szintaktikus hibákat is, ezért az eval függvény használható annak ellenőrzésére, hogy egyes rendszerfüggő eljárások működnek-e egy adott környezetben. Így például ellenőrizhető, hogy a socket vagy symlink függvények implementáltak-e. Az eval használható arra is, hogy a die függvénnyel kivételeket lehessen megvalósítani.

Ha a kód az egyes végrehajtások között nem változik, akkor az eval BLOCK használható arra, hogy az egyes hibákat megfogja a rendszer anélkül, hogy minden egyes végrehajtáshoz a Perl újrafordítaná a kódrészletet. A hibaüzenet, ha van, ebben az esetben is $@ változóba kerül. Példák:

# nullával való osztásután tovább fut a program
eval { $answer = $a / $b; }; warn $@ if $@;
# ugyanaz, de kevésbé hatékony
eval '$answer = $a / $b'; warn $@ if $@;
# ez fordítás ideji hibát generál
eval { $answer = };
# ez viszont futási időben csak $@ értékét állítja be
eval '$answer =';   # sets $@

Az eval használatánál különösen oda kell figyelni arra, hogy mit is hajt végre a Perl futtató. Például

eval $x;            # 1. ESET
eval "$x";          # 2. ESET
eval '$x';          # 3. ESET
eval { $x };        # 4. ESET
eval "\$$x++"       # 5. ESET
$$x++;              # 6. ESET


Az első két változat egyenértékű, mind a kettő az $x változóban levő füzért hajtja végre, mint Perl programrészletet, annak ellenére, hogy az idézőjelek a második esetben egy kicsit félrevezetők, és a program olvasója egy kicsit megakad elgondolkodva azon, hogy vajon még mi történik itt az idézőjelek miatt (semmi). A harmadik és negyedik eset hasonló módon azonos, a végrehajtott kód $x, ami végső soron nem csinál semmit. Az ötödik eset az, amikor az idézőjelek használatának igazából értelme van, kivéve azt, hogy ebben az esetben szimbolikus referenciát is lehet használni.

exec LIST
Az exec rendszerfüggvény végrehajt egy rendszerparancsot, és nem tér vissza. Ha egy rendszerparancsot úgy akarunk meghívni, hogy utána a program visszatér, akkor a system függvényt kell használni.

Ha több, mint egy argumentuma van a függvénynek, vagy, ha az argumentum egy tömb, amelynek több, mint egy eleme van, akkor a rendszer az execvp(3) rendszerhívást hajtja végre, a LIST argumentumokkal. Ha csak egy skalár argumentuma van a függvénynek, akkor ezt a rendszer shell metakarakterek szempontjából ellenőrzi. Ha van ebben shell metakarakter, akkor az egész argumentumot átadja a rendszer a /bin/sh -c paranccsal a rendszernek. Ha nincsenek metakarakterek, akkor az argumentum szavakra lesz bontva, és az így keletkezett szó lista kerül direkt módon az execvp() rendszerhívásba.

Sem az exec, sem pedig a system függvények nem söprik ki a kimeneti puffereket, ezért érdemes $| változót beállítani, hogy ne vesszen el kimenet.

Példák:

exec '/bin/echo', 'Your arguments are: ', @ARGV;
exec "sort $outfile | uniq";

Ha hazudni akarsz a végrehajtandó programnak a nevét illetően, akkor a lista elé indirekt objektumként, vessző nélkül lehet beírni a végrehajtandó parancsot. Ebben az esetben az argumentumokat minden esetben listaként értelmezi a Perl, még abban az esetben is, ha csak egy skalár érték szerepel a listában.

Példák:

$sh = '/bin/csh';
exec $sh '-sh'; # nézzen ki úgy, mint egy login shell

vagy direktebb módon:
exec {'/bin/csh'} '-sh'; # nézzen ki úgy, mint egy login shell

exists EXPRESSION
Visszatérési értéke TRUE, ha a megadott tördelőtábla elem létezik, még abban az esetben is, ha annak értéke undef.

Példa:

print "Exists\n" if exists $array{$key};
print "Defined\n" if defined $array{$key};
print "True\n" if $array{$key};

Egy elem lehet TRUE, ha definiált, és definiált, ha létezik, de a fordított állítás nem feltétlenül igaz.

A kifejezés tetszőlegesen bonyolult lehet, feltéve, hogy az utolsó művelet egy tördelőtábla keresés, például

if (exists $ref->[$x][$y]{$key}) { ... }
exit EXPRESSION
Kiértékeli az EXPRESSION kifejezést, és ennek értékével kilép a programból. Ha definiálva van bármilyen END függvény, akkor ezeket hívja először, de ezek nem tudják az exit függvényt megállítani. Hasonlóan az objektum lebontók, amelyeket meg kell hívni meghívódnak a kifejezés kiértékelése előtt. Ha az EXPRESSION hiányzik, akkor a kilépési érték nulla.

Példa:

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

Hasonló függvény: die.

exp EXPRESSION
Kiszámítja az eEXPRESSION értéket, ahol e a természetes logaritmus alapszáma. Ha EXPRESSION nincs megadva, akkor az exp($_) értéket számítja ki.
fcntl FILEHANDLE,FUNCTION,SCALAR
A UNIX rendszerek fcntl függvényét valósítja meg. Feltehetőleg ennek használatához a use Fcntl; parancsot kell használnod a korrekt függvénydefiníciók eléréséhez.

Az argumentumok kezelése éppen úgy történik, mint a ioctl függvénynél. Az fcntl minden olyan gépen, amelyen nincsen implementálva a fcntl rendszerfüggvény fatális hibát generál.

Példa:

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

fileno FILEHANDLE
Visszaadja a fájl leírót egy fájl kezelőhöz. Ez akkor lehet különösen kellemes amikor bittérképet kell készíteni a select függvényhez. Ha a FILEHANDLE egy kifejezés, akkor ennek értéke adja meg a fájlkezelő nevét.
flock FILEHANDLE,OPERATION
Meghívja a flock rendszerfüggvényt a FILEHANDLE által kezelt fájlra. A rendszerdokumentáció flock(2)manuál oldalán olvasható, hogy OPERATION pontosan milyen értékek esetén mit csinál. Az olyan rendszereken, ahol sem az flock sem pedig az fcntl nincs implementálva fatális hibát generál (például Windows95). Ha egy rendszeren az flock nincs implementálva, de az fcntl igen, akkor automatikusan ezt hívja meg a Perl program. Ezzel az flock hordozható fájl lezárási módszer, de egész fájlokat lehet csak lezárni vele, nem rekordokat.

Egyes rendszereken az flock nem működik hálózaton keresztüli fájlokra, ilyenkor a sokkal rendszerfüggőbb fcntl használandó.

Egy egyszerű példa, amely egy BSD rendszerben a mailbox-hoz fűz hozzá:

$LOCK_SH = 1;
$LOCK_EX = 2;
$LOCK_NB = 4;
$LOCK_UN = 8;
sub lock {
    flock(MBOX,$LOCK_EX);
    # és ha esetleg valaki írt a fájl végéhez
    # amíg vártunk...
    seek(MBOX, 0, 2);
 }
sub unlock {
    flock(MBOX,$LOCK_UN);
 }

open(MBOX, ``>>/usr/spool/mail/<STRONG>$ENV</STRONG>{'USER'}'')
      or die ``Can't open mailbox: $!'';
lock();
print MBOX $msg,"\n\n";
unlock();

fork
Végrehajt egy fork(2) rendszerhívást. A gyerek pid (processz azonosító) a visszatérési értéke az apa processzben, és 0 a gyerek processzben, vagy undef ha a fork sikertelen. A kitakarítatlan pufferek azok maradnak mind a két processzben, így $| értékének beállítása vagy az autoflush meghívása szükséges a dupla műveletek elkerülése érdekében.

Ha a fork függvényt úgy hívod meg, hogy nem vársz a gyermek processzre, akkor zombikat generálsz:

$SIG{CHLD} = sub { wait };

Egy mási dupla fork trükk:

unless ($pid = fork) {
    unless (fork) {
        exec "amit csak végre akarunk hajtani";
        die "nincs exec";
        # ... vagy ...
        ## (Perl kód jön ide)
        exit 0;
    }
    exit 0;
}
waitpid($pid,0);

format
Deklarál egy nyomtatási képformátumot, amelyet azután a write függvény használ. Például:
format Something = 
    Test: @<<<<<<<< @||||| @>>>>>
          $str,     $%,    '$' . int($num)
.
$str = "widget";
$num = $cost/$quantity;
$~ = 'Something';
write;


formline PICTURE, LIST
Ez egy belső függvény, amelyet a format hív meg, de amelyet meghívhat a Perl program is. Egy sor értéket formáz meg a PICTURE formátumnak megfelelően, és az eredményt a format kimenet gyűjtőbe $^ helyezi el.

Tulajdonképpen amikor egy write függvényhívás történik a $^ tartalma íródik ki egy fájlba.

getc FILEHANDLE

getc
Visszaadja a következő karaktert a FILEHANDLE fájlkezelőhöz rendelt fájlból, vagy nulla füzért ad vissza a fájl végén. Ha nincs megadva fájlkezelő, akkor a szabványos bemenetről olvas. Ez a függvény nem túl hatékony, és ugyanakkor nem használható nem pufferelt egyedi karakterek beolvasására sem. Ehhez valami ilyesmire van inkább szükség:
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";


getlogin
Az aktuális login értéket adja vissza az /etc/utmp fájlból. Ha nulla, akkor a getpwuid függvényt kell használni,
$login = getlogin || (getpwuid($<))[0] || "Verhas";

Ugyanakkor a getlogin függvény nem ajánlott autentikációs feladatokhoz, mert nem elegendően biztonságos.
getpeername SOCKET
Visszaadja a csomag sockaddr címét a SOCKET kapcsolat másik végének.
use Socket;
$hersockaddr    = getpeername(SOCK);
($port, $iaddr) = unpack_sockaddr_in($hersockaddr);
$herhostname    = gethostbyaddr($iaddr, AF_INET);
$herstraddr     = inet_ntoa($iaddr);
getpgrp PID
Visszaadja a pillanatnyi processz csoportot a megadott PID-hez. Ha a PID nulla, vagy nincs megadva akkor a program processzhez adja meg a csoportot. Hibát generál olyan gépeken, ahol a getpgrp(2) rendszerhívás nincs implementálva. A POSIX verziója a getpgrp() függvénynek csak az aktuális processzhez mondja meg a csoportot, ezért a getpgrp használata csak PID==0 esetén hordozható.
getppid
Az apa processz azonosítóját adja vissza.

getpriority WHICH,WHO
Az aktuális processz, processz csoport vagy felhasználó prioritását adja vissza. Fatális hibát okoz olyan gépeken, ahol a getpriority rendszerhívás nincs implementálva.
getpwnam NAME

getgrnam NAME

gethostbyname NAME

getnetbyname NAME

getprotobyname NAME

getpwuid UID

getgrgid GID

getservbyname NAME,PROTO

gethostbyaddr ADDR,ADDRTYPE

getnetbyaddr ADDR,ADDRTYPE

getprotobynumber NUMBER

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
Ezek a függvények pont azt teszik, mint a megfelelőik a rendszerkönyvtárban. Lista környezetben a visszatérési értékek csoportonként különböznek a következők szerint:
($name,$passwd,$uid,$gid,
   $quota,$comment,$gcos,$dir,$shell) = getpw*
($name,$passwd,$gid,$members) = getgr*
($name,$aliases,$addrtype,$length,@addrs) = gethost*
($name,$aliases,$addrtype,$net) = getnet*
($name,$aliases,$proto) = getproto*
($name,$aliases,$port,$proto) = getserv*

Ha a megfelelő elem nem létezik, akkor nulla listát ad vissza a rendszer.

Skalár környezetben a nevet adja vissza a rendszer, kivéve, ha függvény éppenséggel név szerinti keresésre irányul. Ekkor éppen a másik dolgot adja vissza a függvény, bármi legyen is az a másik dolog.

Ha a megfelelő elem nem létezik, akkor undef értéket ad vissza a rendszer. Például:

$uid = getpwnam
$name = getpwuid
$name = getpwent
$gid = getgrnam
$name = getgrgid
$name = getgrent
stb.

A $members érték amit a getgr* függvények visszadnak a csoporthoz tartozó felhasználók login neveit adják meg egy füzérben szóközzel elválasztva.

A gethost*() függvények, amennyiben a C rendszer támogatja a h_errno változót ennek értékét a $? változóban adják vissza. A @addrs változó, amelyet a sikeres hívás ad vissza a nyers címeket tartalmazzák, amelyeket a a megfelelő rendszerfüggvény adott vissza. Az Internet tartományban minden ilyen cím négy bájt hosszú és kicsomagolható egy

($a,$b,$c,$d) = unpack('C4',$addr[0]);
paranccsal.
getsockname SOCKET
A távolis Socket kapcsolat csomag sockaddr címét adja vissza.
use Socket;
$mysockaddr = getsockname(SOCK);
($port, $myaddr) = unpack_sockaddr_in($mysockaddr);

getsockopt SOCKET,LEVEL,OPTNAME
Visszaadja a kért socket opciókat, és undef ha valamilyen hiba történt.
glob EXPRESSION
Visszaadja a fájl nevét a megfelelő joker karakter kiegészítéssel, úgy ahogy azt a shell tenné. Ez a belő függvény, amelyet a <*.*> operátor használ.
gmtime EXPRESSION
Átkonvertálja az argumentumként megadott időt (amelyet a time függvényből nyerünk) egy kilenc elemű listává. Ez az idő nem lesz lokalizálva, azaz a greenwichi középidőt adják meg a tömb egyes elemei. A tipikus felhasználás:
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) =
                                            gmtime(time);

Az összes listaelem numerikus, és direkt módon a struct tm rekordból kerülnek ki. Másszavakkal ez azt jelenti, hogy $mon nulla és 11 között lesz, $wday nulla és 6 között.

Ha nincs EXPRESSION megadva, akkor gmtime(time()) kerül kiszámításra.

goto LABEL

goto EXPRESSION

goto &NAME
A goto LABEL forma megkeresi azt az utasítást, amely a LABEL címkével van megjelölve, és ennél az utasításnál folytatja a futást. Nem használható bármilyen olyan programstruktúrába való beugrásba, amely valamilyen inicializálást kíván, mint szubrutin, vagy foreach hurok. Akkor sem szabad ilyen struktúrába belelépni ezzel az utasítással, ha azt a Perl értelmező kioptimalizálta.

Gyakorlatilag bárhova el lehet ugrani a dinamikus kereteken belül, akár ciklusból vagy szubrutinból ki is. Ugyanakkor ezekre alkalmasabb valamely más konstrukció, például last vagy die.

A goto EXPRESSION azt várja, hogy a kifejezés értéke egy cimke legyen, amelyet a kifejezés kiértékelése után megkeres a Perl értelmező, és onnan folytatja a futást. Ez olyan kiszámított goto lehetőséget ad, mint amilyent egyesek FORTRAN-ban szokhattak meg, de nem ajánlott a használata.

A gotot &NAME forma meghívja a NAME szubrutint, de amikor az visszatér akkor nem a goto utasítás után folytatódik a futás, hanem ott ahol ahonnan a goto-t tartalmazó szubrutint meghívták. Más szavakkal ez a goto olyan, mint egy szubrutinhívás, amelyet rögtön követ egy return utasítás, azzal a különbséggel, hogy a hívott szubrutin ebben az esetben más vermet, és más hívótlát (caller).

Ezt az utasítást általában a modulok AUTOLOAD szubrutinjai használják, amelyek futási időben, akkor töltenek be egyes szubrutinokat, amikor azokra a hivatkozás történik, majd úgy hívja meg azokat, mintha rögtön azokat hívta volna meg a program (kivéve, hogy minden módosítás, amely a @_ változón történik a hívott félnél megmarad). A goto után a még a caller függvény sem tudja megmondani, hogy nem ez a szubrutin volt elsőként meghívva.

grep BLOCK LIST

grep EXPRESSION,LIST
Végrehajtja a BLOCK vagy EXPRESSION blokkot, illetve kifejezést a LIST lista minden elemére (helyileg beállítva $_ értékét az egyes elemekre és visszaad egy olyan listát, amely tartalmazza azokat az elemeket, amelyekre a BLOCK vagy EXPRESSION értéke TRUE. Skaláris környezetben azt adja meg, hogy hányszor volt a kifejezés értéke TRUE.
@foo = grep(!/^#/, @bar);    # kitöröljük a megjegyzéseket
       # ekvivalens módon
@foo = grep {!/^#/} @bar;    # ugyanezt csinálja

Mivel $_ referenciaként kerül beállításra, ezért használható arra, hogy a lista egyes elemeit módosítsa a grep függvény, de ez igen bizarr eredményeket adhat abban az esetben, amikor a LIST lista nem egy névvel hivatkozott tömb.

hex EXPRESSION
Az EXPRESSION kifejezést, mint hexadecimálisan megadott füzért értelmezi, és a numerikus értéket adja vissza. Az olyan számok értelmezésére, amelyek vagy 0x karakterekkel kezdődnek az oct függvény használható.

Ha EXPRESSION nincs megadva, akkor $_ értékét használja a függvény.

import
Nincs igazi, beépített import függvény. Sokkal inkább ilyen néven kell definiálni egy modulon belül azt a szubrutint amelyek a szimbólumtábla importját végzik. Ez az a szubrutin, amelyet a use függvény hív meg.
index STR,SUBSTR,POSITION

index STR,SUBSTR
Visszaadja a SUBSTR füzér STR füzérbeli első előfordulási helyének az indexét a POSITION pozíciónál, vagy az után. Ha nincs megadva pozíció, akkor a füzér elejétől kezdi a keresést. A visszatérési érték nullától indul (illetve attól az értéktől amire $[ be lett állítva, de jobb ilyet nem tenni), másképp fogalmazva az első karakter indexe nulla, a másodiké egy stb.

Ha a füzér nem található meg, akkor visszatérési érték -1, pontosabban fogalmazva $[-1.

int EXPRESSION
Az EXPRESSION kifejezés egészrészét adja vissza. Ha nincs megadva argumentum, akkor $_ egészrészét adja vissza.
ioctl FILEHANDLE,FUNCTION,SCALAR
Az ioctl(2) rendszerfüggvényt valósítja meg. Ennek használata előtt feltehetőleg a
    require "ioctl.ph"; # probably in /usr/local/lib/perl/ioctl.ph

sorral be kell emelni a függvény definícióját. Ha ez a fájl nem létezik az adott rendszeren, akkor nem marad más, mint a megfelelő C fejléc fájlok alapján előállítani, de ez nem triviális.

SCALAR értékét fogja a függvény írni, illetve olvasni a FUNCTION függvénynek megfelelően. Ha SCALAR füzér, akkor a rendszerfüggvény a füzérre mutató mutatót ad át, míg ha értéke numerikus, akkor magát a numerikus értéket. Hogy biztos legyen, hog egy érték numerikus előtte adjunk hozzá nullát.

A pack és unpack függvények nagyon hasznosak lehetnek az ioctl függvény által kezelt struktúrák manipulálásához.

A következő példa a DEL karaktert állítja törlő karakterré:

require 'ioctl.ph';
$getp = &TIOCGETP;
die "NO TIOCGETP" if $@ || !$getp;
$sgttyb_t = "ccccs";                # 4 chars and a short
if (ioctl(STDIN,$getp,$sgttyb)) {
    @ary = unpack($sgttyb_t,$sgttyb);
    $ary[2] = 127;
    $sgttyb = pack($sgttyb_t,@ary);
    ioctl(STDIN,&TIOCSETP,$sgttyb)
        || die "Can't ioctl: $!";
}

Az ioctl és fcntl függvények visszatérési értéke a következő:
     az operációs rendszer             a Perl
      visszatérési értéke        visszatérési értéke

            -1                        undef
             0                  füzér "0 de TRUE"
        bármi más szám               maga a szám

Így a Perl függvény visszatérési értéke TRUE siker esetén, és FALSE hiba esetén, mégis lehetőség van megnézni, hogy az operációs rendszer milyen értéket adott vissza.

($retval = ioctl(...)) || ($retval = -1);
printf "System returned %d\n", $retval;

join EXPRESSION,LIST
A LIST listában szereplő füzéreket fűzi össze egy füzérré az EXPRESSION kifejezés által megadott füzérrel, mint elválasztóval. Például:
print join('|' , (1,2,3,5,6,7,9,"kurtavas"));
kimenete
1|2|3|5|6|7|9|kurtavas
Az ellentétes hatású függvény, amely egy füzért szétbont listává a split.
keys ASSOC_ARRAY
A visszatérési értéke egy tömb, amely tartalmazza az argumentumként megadott tördelőtábla kulcsait. Skaláris környezetben a kulcsok számát adja meg. A sorrend, ahogy a kulcsok szerepelnek a tömbben nem rendezett, de garantáltan ugyanaz a sorrend, ahogy az egyes elemeket a values illetve az each adja vissza, feltéve, hogy két ilyen függvényhívás között nem változott meg a tördelőtábla.

Egy újabb példa a környezeti változók kiírására:

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


és a környezeti változók azon a gépen, ahol e dokumentum HTML-re fordítása történt:
SYSTEMDRIVE=C:
PATHEXT=.COM;.EXE;.BAT;.CMD
MSDEVDIR=C:\Program Files\DevStudio\SharedIDE
OS2LIBPATH=C:\WINNT\system32\os2\dll;
PROCESSOR_LEVEL=5
LIB=c:\program files\devstudio\vc\lib;c:\program files\devstudio\vc\mfc\lib;%lib%
USERDOMAIN=VPHOME
LOGONSERVER=\\VPHOME
HOMEPATH=\
TEMP=C:\TEMP
TMP=C:\TEMP
COMPUTERNAME=VPHOME
USERPROFILE=C:\WINNT\Profiles\verhas
NUMBER_OF_PROCESSORS=1
PERL5DB=BEGIN { require 'C:\Program Files\ActiveState Perl Debugger\PerlDB.pl' }
PROCESSOR_REVISION=0403
PATH=C:\Perl\bin;C:\WINNT\system32;C:\WINNT;c:\program files\devstudio\sharedide\bin\ide;c:\program files\devstudio\sharedide\bin;c:\program files\devstudio\vc\bin
WINDIR=C:\WINNT
COMSPEC=C:\WINNT\system32\cmd.exe
SYSTEMROOT=C:\WINNT
INCLUDE=c:\program files\devstudio\vc\include;c:\program files\devstudio\vc\atl\include;c:\program files\devstudio\vc\mfc\include;%include%
HOMEDRIVE=C:
OS=Windows_NT
PROCESSOR_ARCHITECTURE=x86
PROCESSOR_IDENTIFIER=x86 Family 5 Model 4 Stepping 3, GenuineIntel
PROMPT=$P$G
USERNAME=verhas

kill LIST
Jelzést (signal) küld a LIST listában szereplő processzeknek. A LIST lista első eleme a jelzés értéke, a további elemek a processz azonosítók. A visszatérési érték a sikeres jelküldések száma.
$cnt = kill 1, $child1, $child2;
kill 9, @goners;


A shell-lel ellentétben, Perl-ben ha a jel értéke negatív, akkor processz csoportoknak küldi a kill a jelet. (A System V rendszereken is így van, az azonban nem hordozható, Perl-ben minden rendszeren így van, ahol a kill függvény implementált.) Ez azt jelenti, hogy általában pozitív értékeket kell használni. Használhatók a jelek nevei aposztrófok között is.
last LABEL

last
A last nem függvény, hanem egy utasítás. A hatása hasonló a C programozási nyelvbeli break utasításhoz. Hatására a program azonnal abbahagyja a ciklus végrehajtását. Ha a LABEL címke nincs megadva, akkor a legbelső ciklus futását szakítja meg a program, ha LABEL meg van adva, akkor azt a ciklust szakítja meg, amelyre a címke vonatkozik.

A program futása a parancs végrehajtásának hatására a ciklus utáni utasításon folytatódik. continue blokk nem hajtódik végre.

$i = 7;
CIKLI:
 while(1){
   $j = 1;
   while(1){
     last if $j == 3 && $i < 9 ;
     last CIKLI if $j == 3;
     print $i,$j++ ;
     }
   $i++;
   }


és a kimenete:
717281829192
lc EXPRESSION
Az EXPRESSION kifejezés, mint füzér kisbetűs alakját adja vissza. Ez az a belső függvény, amelyet a \L escape szekvencia használ. Elvileg figyelembe kell vennie minden POSIX setlocale() beállítást.
lcfirst EXPRESSION
Az EXPRESSION kifejezés, mint füzért adja vissza, úgy, hogy az első karakter kisbetűs. Ez az a belső függvény, amelyet a \l escape szekvencia használ. Elvileg figyelembe kell vennie minden POSIX setlocale() beállítást.
length EXPRESSION
Az EXPRESSION kifejezés, mint füzér karakterekben mért hosszát adja vissza. Ha az EXPRESSION nincs megadva, akkor $_-t használja.
link OLDFILE,NEWFILE
Létrehoz egy új fájlnevet NEWFILE néven, amelyet a régi fájlhoz OLDFILE kapcsol. A visszatérési értéke 1 siker esetén, és 0 egyébként. Windows NT alatt nincs implementálva.

listen SOCKET,QUEUESIZE
Ugyanazt teszi, mint az azonos nevű rendszerhívás. Visszatérési értéke TRUE siker esetén, és FALSE egyébként.
local LIST
A local nem egy függvény, hanem egy Perl utasítás, amely a LIST listában felsorolt változókat teszi lokálissá egy szubrutin, eval vagy do blokk erejéig. Ez a lokalitás azonban nem olyan, mint amit PASCAL, C vagy bármilyen más programozási nyelvben megszokhattunk.

A local által adott lokalitás futási idejű, és nem grammatikai. A grammatikai lokalitást a my utasítás adja.

Részletes leírás található a szbrutinokról szóló fejezetben.

localtime EXPRESSION
Átkonvertálja az argumentumként megadott időt (amelyet a time függvényből nyerünk) egy kilencelemű listává. A megadott idő helyi idő lesz. A tipikus felhasználás:
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) =
                                            localtime(time);

Az összes listaelem numerikus, és direkt módon a struct tm rekordból kerülnek ki. Másszavakkal ez azt jelenti, hogy $mon nulla és 11 között lesz, $wday nulla és 6 között.

Ha nincs EXPRESSION megadva, akkor gmtime(time()) kerül kiszámításra.

Skalár környezetben füzérként írja ki az időt a ctime(3) rendszerhívásnak megfelelően.

$a =localtime;
print $a;

Mon Jul  6 01:48:47 1998
log EXPRESSION
Az argumentumként megadott EXPRESSION kifejezés természetes alapú logaritmusát számítja ki és adja vissza értékként. Ha EXPRESSION kifejezés nincs megadva, akkor $_-t használja a program.
lstat FILEHANDLE

lstat EXPRESSION
Ugyanazt teszi, mint a stat függvény, de nem a fájl paramétereit vizsgálja meg, hanem a szimbolikus link-ét. Ha a szimbolikus linkek nincsenek implementálva a rendszeren, akkor ugyanaz a hatása, mint a stat-nak.
m//
A mintaillesztési operátor. Részletesen a reguláris kifejezések fejezetben.
map BLOCK LIST

map EXPRESSION,LIST
Kiértékeli a BLOCK blokkot, vagy az EXPRESSION kifejezést a LIST lista minden egyes elemére, úgy, hogy közben $_ tartalmazza az éppen aktuális listaelemet. A visszatérési érték egy lista, amely az egyes kiértékelések eredményeiből adódik. A kiértékelés minden egyes ciklusban listakörnyezetben zajlik, így egy-egy kiértékelés több, mint egy listaelemet is eredményezhet, a végső lista ezeknek az összefűzéséből fog adódni.
@chars = map(chr, @nums);
számok listáját konvertálja a megfelelő karakterekké.
%hash = map { getkey($_) => $_ } @array;

ugyanaz, mint

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

mkdir FILENAME,MODE
Létrehozza a FILENAME könyvtárak a megadott hozzáférési móddal. Ha a művelet sikeres a visszatérési érték 1, ha nem akkor 0 és $! tartalmazza a hibaüzenetet.
msgctl ID,CMD,ARG
Meghívja a System V IPC msgctl(2) függvényt. Ha CMD &IPC_STAT, akkor ARG egy változó kell, hogy legyen, amelyik tartalmazza a visszaadott msqid_ds struktúrát. A visszatérési érték az ioctl-hez hasonlóan undef hiba esetén és "0 de TRUE" zero esetén, illetve az aktuális érték egyébként.
msgget KEY,FLAGS
Meghívja a System V IPC msgget(2) függvényt. A visszatérési érték az üzenetsor azonosító, illetve undef hiba esetén.
msgsnd ID,MSG,FLAGS
Meghívja a System V IPC msgsnd függvényt az MSG üzenet elküldésére az ID azonosítójú üzenetsorba. Az MSG üzenetnek egy hosszú egész (long int) számmal kell kezdődnie, amelyet például a pack('l',$type) függvénnyel lehet létrehozni. A visszatérési érték TRUE siker esetén, és FALSE egyébként.
msgrcv ID,VAR,SIZE,TYPE,FLAGS
Meghívja a System V IPC msgrcv függvényt, hogy az ID azonosítójú üzenetsorból üzenetet kapjon a VAR változóba, maximum SIZE méretben. Amennyiben üzenet érkezik, az első dolog a VAR változóban az üzenet típusa lesz és a VAR változó mérete SIZE plusz az üzenet típus mérete. A visszatérési érték TRUE siker esetén és FALSE egyébként.
my EXPRESSION
A my nem egy függvény, hanem egy Perl utasítás, amely a LIST listában felsorolt változókat teszi lokálissá egy szubrutin, eval vagy do blokk erejéig. Ez a lokalitás olyan, mint amit PASCAL, C vagy bármilyen más programozási nyelvben megszokhattunk ellentétben a local utasítással.

Részletes leírás található a szbrutinokról szóló fejezetben.

next LABEL

next
A next egy olyan ciklusutasítás, amelynek hatására a ciklus újraindul úgy, mint a C programozási nyelvben a continue hatására.

Ha a ciklushoz van continue blokk, akkor az ebben található utasítások végrehajtónak a next hatására, mielőtt a ciklus újraindulna.

Ha nincs megadva LABEL címke, akkor az utasítás a legbelső ciklusra vonatkozik.

no Module LIST
A use függvény ellentéte.
oct EXPRESSION
Az EXPRESSION kifejezést, mint oktális füzért értelmezi, és az értékét adja vissza. Ha a füzér éppen 0x karakterekkel kezdődik, akkor hexadecimális értékként értelmezi. A következő sor mind a decimális, mind az oktális, mind pedig a hexadecimális számokat megfelelően konvertálja, amennyiben azok a C szintaxisnak (ami Perl-ben ugyanaz) megfelelnek:
$val = oct($val) if $val =~ /^0/;

Ha EXPRESSION nincs megadva, akkor $_-t használja a rendszer.
open FILEHANDLE,EXPRESSION

open FILEHANDLE
Megnyit egy fájlt, amelynek a nevét az EXPRESSION tartalmazza, és hozzárendeli a FILEHANDLE fájlkezelőhöz. Ha FILEHANDLE helyén egy kifejezés van, akkor ennek az értékét fogja használni, mint a fájlkezelő nevét. Ha az EXPRESSION kifejezés hiányzik, akkor a skaláris változó, amelynek ugyanaz a neve, mint a FILEHANDLE fájlkezelőnek tartalmazza a fájl nevét. Ha a fájlnév < karakterrel kezdődik akkor olvasásra nyitja meg a rendszer a fájlt. (Egyébként ez az alapviselkedés, ha tehát a következők egyikének sem felel meg a szintaxis, akkor is olvasásra nyitja meg a fájlt.)

Ha a fájlnév > karakterrel kezdődik, akkor írásra nyitja meg. Ha a fájlnév kezdete >> akkor hozzáírásra nyitja meg a fájlt (írásra a végére pozícionálva, így hozzáír a fájlhoz).

Egy + jel kerülhet a < vagy > jel elé a mind írásra, mind pedig olvasásra való megnyitáshoz. Általában a +< a szokásos írás/olvasás megnyitási forma, mivel a +> a fájlt először törli. Ezek megfelelnek a fopen(3) rendszerhívás 'r', 'r+', 'w', 'w+', 'a', és 'a+' módjainak.

Ha a fájlnév egy | karakterrel kezdődik, akkor a fájlnevet a rendszer mint parancsot értelmezi amelynek bemenete a cső, ha pedig az utolsó karakter, akkor olyan parancsként értelmezi a rendszer amelynek kimenetéből olvasunk.

Olyan open() parancsot nem lehet kiadni, amelyikbe írunk is és olvasunk is belőle.

- megnyitása a szabványos bemenet megnyitását jelenti, és >- megnyitása a szabványos kimenet.

Siker esetén a függvény visszatérési értéke nem nulla, hiba esetén undef. Ha a fájl történetesen egy cső, akkor a visszatérési érték az alprocessz PID-je.

Ha olyan rendszeren használod a Perl-t, amelyik különbséget tesz bináris és text fájlok között, akkor érdemes használni a binmode függvényt. A lényegi különbség a text fájlok sorvégjelölésében van.

$ARTICLE = 100;
open ARTICLE or die "Can't find article $ARTICLE: $!\n";
while (<ARTICLE>) {...

open(LOG, '>>/usr/spool/news/twitlog'); # (log is reserved)
open(DBASE, '+<dbase.mine');            # open for update
open(ARTICLE, "caesar <$article |");    # decrypt article
open(EXTRACT, "|sort >/tmp/Tmp$$");     # $$ is our process id

# feldolgozzuk a fájlokat, és minden include fájlt
foreach $file (@ARGV) {
    process($file, 'fh00');
}
sub process {
   local($filename, $input) = @_;
   $input++; #ez füzér növelés!!
   unless (open($input, $filename)) {
     print STDERR "Can't open $filename: $!\n";
     return;
     }
   while (<$input>) {              # note use of indirection
     if (/^#include "(.*)"/) {
     process($1, $input);
     next;
     }
      ...         # bármilyen kód
  }
    }

A Bourne shell hagyományainak megfelelően ha a fájlnév >& karakterekkel kezdődik, akkor a füzér további része, mint a fájlkezelő neve értelmeződik, és ez lesz megduplázva és megnyitva. Az & karakter használható >, >>, <, +>, +>> és +< után. A módnak ugyanannak kell lenni, mint az eredeti fájlnál.

Itt egy rövid script, amely elmenti, átirányítja, és visszaállítja az STDOUT és STDERR-t:

#!/usr/bin/perl
open(SAVEOUT, ">&STDOUT");
open(SAVEERR, ">&STDERR");
open(STDOUT, ">foo.out") || die "Can't redirect stdout";
open(STDERR, ">&STDOUT") || die "Can't dup stdout";
select(STDERR); $| = 1;     # make unbuffered
select(STDOUT); $| = 1;     # make unbuffered
print STDOUT "stdout 1\n";  # this works for
print STDERR "stderr 1\n";  # subprocesses too
close(STDOUT);
close(STDERR);
open(STDOUT, ">&SAVEOUT");
open(STDERR, ">&SAVEERR");
print STDOUT "stdout 2\n";
print STDERR "stderr 2\n";

Ha a fájlnév <&= karakterekkel kezdődik, akkor a Perl a C nyelv fdopen függvényének megfelelően működik.

Ha egy csövet (pipe) nyitunk meg a - fájlnévre, akár |- akár pedig -| formában, akkor implicit módon egy fork hajtódik végre. Az open visszatérési értéke ebben az esetben a gyermek processz PID-je az apában és 0 a gyerekben. (Ilyenkor az open értéke helyett a defined függvénnyel kell megvizsgálni, hogy sikeres volt-e a megnyitás.) Az apában a fájlkezelő normálisan lesz megnyitva, és az írás/olvasás a gyermek processz felé halad/onnan jön. A gyerekben a fájlkezelő nem lesz megnyitva, az írás és olvasás a szabványos bemeneten és kimeneten kell, hogy történjen.

A close meghívása bármely csőre a gyermek processz végére való várakozást jelenti és a visszatérési érték $? változóba kerül.

Minden olyan operációs esetén, amelyik fork-ot hajt végre, a kiürítetlen pufferek kiürítetlenek maradnak, ezért ezekre a $| értékét 1-re kell állítani.

A FileHandle csomag használatával lehetőség van olyan fájlkezelő nevek kialakítására, amelyek ugyanolyan környezetben használhatók, mint a rájuk hivatkozó változók, és automatikusan bezárja őket a rendszer, amikor minden hivatkozás megszűnik a fájlra:

use FileHandle;
...
sub read_myfile_munged {
  my $ALL = shift;
  my $handle = new FileHandle;
  open($handle, "myfile") or die "myfile: $!";
  $first = <$handle>
    or return ();     # automatikusan bezárja itt
  mung $first or die "mung failed";       # vagy itt
  return $first, <$handle> if $ALL;       # vagy itt
  $first;                                 # vagy itt
  }

A fájlnévből, amelyet az open megkap a bevezető és a lezáró szóközöket kitörli. Emiatt, ha olyan fájlt akarsz megnyitni, amely bevezető, vagy lezáró szóközöket tartalmaz, ezeket meg kell védeni. Ennek egy lehetséges módja:

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

Ha igazi C open-t szeretnél, akkor a sysopen függvényt kell használni. Ez egy másik lehetőség a fájlnév teljes megvédésére, például
use FileHandle;
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 "A fájl tartalma: ", <HANDLE>;

Érdemes még a seek függvényt is megtanulni ahhoz, hogy hogyan lehet az olvasást, és az írást keverni.
opendir DIRHANDLE,EXPRESSION
Az EXPRESSION kifejezés által megadott nevű könyvtárat nyitja meg, hogy a readdir, telldir seekdir rewinddir és closedir függvényekkel hozzá lehessen férni a fájlnevekhez. Visszatérési értéke TRUE siker esetén és FALSE egyébként. A DIRHANDLE könyvtárkezelő külön névterületen van nyilvántartva, elkülönítve a fájlkezelőktől, így egy könyvtárkezelőnek lehet ugyanaz a neve, mint egy fájlkezelőnek.
ord EXPRESSION
Az EXPRESSION által adott füzér első karakterének ASCII kódját adja vissza. Ha nincs argumentum megadva, akkor $_ értékét veszi.
pack TEMPLATE,LIST
Sorba veszi a LIST lista elemeit, és egy bináris értéket alkot belőlük a TEMPLATE füzérnek megfelelően értelmezve a LIST lista egyes elemeit. A TEMPLATE-ben az egyes karakterek jelentése:
  • A ASCII füzér szóközökkel kiegészítve.
  • a ASCII füzér nulla karakterekkel kiegészítve.
  • b bit füzér növekvő bit sorrendben, mint a vec függvénynél.
  • B bit füzér csökkenő bit sorrendben.
  • h hexadecimális füzér alacsony helyérték először.
  • H hexadecimális füzér magas helyérték először.
  • c előjeles karakter érték.
  • C előjel nélkülikarakter érték.
  • s előjeles rövid egész.
  • S előjel nélküli rövid egész.
  • i előjeles egész.
  • I előjel nélküli egész.
  • l előjeles hosszú egész.
  • L előjel nélklüli hosszú egész.
  • n rövid egész "hálózati" sorrendben.
  • N hosszú egész "hálózati" sorrendben.
  • v rövid egész VAX (little endian) sorrendben.
  • V hosszú egész VAX (little endian) sorrendben.
  • f szimpla pontosságú lebegőpontosságú szám natív formátumban.
  • d dupla pontosságú lebegőpontos szám natív formátumban.
  • p nulla lezárású füzérre mutató mutató.
  • P struktúrára mutató mutató.
  • u uuencode kódolású füzér.
  • w BER kompresszált egész. A bájtok ebben a formában 128-as számrendszerben tartalmazzák a számot, a legnagyobb helyérték az első bájtban, a lehető legkevesebb bájton ábrázolva, és a legfelső bit minden bájtban nulla, kivéve az utolsó bájtot.
  • x Egy nulla bájt.
  • X Egy bájt visszalépés.
  • @ Nulla kitöltés abszolút pozícióig.

Minden egyes betűt követhet egy szám, amely megadja, hányszor kell a betűt figyelembe venni. Minden típusnál, kivéve az ``a'', ``A'', ``b'', ``B'', ``h'', ``H'', és ``P'' típusokat a pack függvény ennyi argumentumot dolgoz fel az adott betűre a listából. A * mint ismétlési érték azt jelenti, hogy a lista maradék elemeit mind az adott típus szerint kell feldolgozni. Az ``a'' és ``A'' csak egy értéket vesz a listából, de a megadott szám hosszúságú füzért állít belőle elő nullákkal kiegészítve ha szükséges. Az unpack függvény használatakor az ``A'' leveszi a lezáró szóközöket és nullákat, de az ``a'' nem. Ennek megfelelően az ismétlési érték a ``b'' és ``B'' karaktereknél a bitek, a ``h'' és ``H'' karaktereknél a hexa digitek számát adja meg. A ``P'' esetén a szám a struktúra méretét adja meg, amelyre a mutató mutat. A valós számok (float és double) natív formában kerülnek tárolásra, mivel nincsen elfogadott szabvány, amely a hálózaton keresztüli adatcserét lehetővé tenné. Ez azt jelenti, hogy az egyik gépen összepakolt lebegőpontos számok nem feltétlenül kicsomagolhatók egy másikon, még akkor sem, ha mind a két gép IEEE lebegőpontos formátumot használ, mivel az IEEE formátum nem határozza meg a bájtsorrendet.

A Perl nyelv belül, mint a C mindig duplapontosságú számokat használ, ezért a simapontosságúra való konverzió veszít a precizitásából. Emiatt például

unpack(``f'', pack(``f'', $foo) == $foo

nem feltétlenül igaz.
$foo = pack("cccc",65,66,67,68);
# foo eq "ABCD"
$foo = pack("c4",65,66,67,68);
# ugyanaz
$foo = pack("ccxxcc",65,66,67,68);
# foo eq "AB\0\0CD"
$foo = pack("s2",1,2);
# "\1\0\2\0" little-endian gépen
# "\0\1\0\2" big-endian gépen
$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"

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

Általánosan azt lehet mondani, hogy ugyanazt a TEMPLATE füzért lehet használni az unpack függvényben is.
package NAMESPACE
Egy fordítási egységet definiál az adott névterülethez. A package deklaráció hatásterülete az utasítást tartalmazó blokk végéig tart. Az utasítás után minden változó, amelyhez nincs explicit módon névterület megadva az adott névterülethez fog tartozni.

Tipikusan ez az az utasítás, amely elsőkét szerepel egy olyan fájlban, amelyet egy require vagy use függvénnyel használ valamely Perl program.

Egy ilyen csomagba több helyen is be lehet kapcsolódni, a package utasítás csak annyit mond a fordítónak, hogy mely névterületet használja a fordítás során a blokk végéig.

Más névterületen levő változókra, vagy fájlkezelőkre explicit névterület megadással lehet hivatkozni, a névterületet a változó neve elé kell írni két kettősponttal elválasztva: $csomag::változó. Ha a csomag neve nulla, akkor a main csomagot használja a Perl, azaz $::quty ugyanaz, mint $main::quty.

pipe READHANDLE,WRITEHANDLE
Egy csőpárt nyit meg, hasonlóan az ugyanilyennevű rendszerhíváshoz. Perl a csöveknél puffereket használ, ezért szükség lehet $| 1-re állítására a WRITEHANDLE kiürítésére minden egyes parancs után, az alkalmazás igényeinek megfelelően.
pop ARRAY
Kiveszi egy tömb utiolsó elemét, és visszatérési értékként adja. Ugyanaz a hatása, mint a
    $tmp = $ARRAY[$#ARRAY--];

utasításnak.

Ha a tömbben nincsen egyetlen elem sem, akkor a visszatérési érték undef. Ha nincs argumentum megadva, akkor az @ARGV tömböt használja a főprogramban, és a @_ tömböt szubrutinokban, éppen úgy, mint a shift.

pos SCALAR
Azt a pozíciót adja meg, ahol a legutolsó m//g keresés megállt a SCALAR változóhoz. Érték is adható ennek a függvénynek, amelynek hatására a következő keresés annál a karakternél fog folytatódni, amelyet megadtunk.

Példa

#               11111
#     012345678901234
#       |    |   |  |
$s = 'bbb abbbabb bbb';

while( $s =~ m/bb/g ){
  print pos($s),"\n";
  }
amelynek kimenete
2
7
11
14

és
#               111111
#     0123456789012345
#       ||   ||  |  ||
$s = 'bbb abbbabb bbb';

while( $s =~ m/bb/g ){
  print $i=pos($s),"\n";
  pos($s) = --$i;
  }
amelynek kimenete
2
3
7
8
11
14
15

print FILEHANDLE LIST

print LIST

print
A listában szereplő füzéreket nyomtatja ki. Visszatérési értéke TRU siker esetén. FILEHANDLE lehet egy skalár változó, amely esetben a változó által megadott füzért használja a Perl, mint a fájlkezelő nevét.

Ha a FILEHANDLE nincs megadva, akkor a szabványos kimenetre nyomtat, illetve a legutoljára select függvénnyel kiválasztott csatornába. Ha a LIST lista is hiányzik, akkor $_ értékét írja ki. Mivel a print egy listát ír ki, ezért bármi, ami a print argumentumai között kiértékelődik lista környezetben értékelődik ki.

Oda kell figyelni arra is, hogy ha a listában az első argumentum valamiért nyitózárójellel kezdődik, akkor ezt a Perl a print függvény argumentumait körülzáró nyitó zárójelnek veszi és a záró zárójel utáni listaelemeket nem nyomtatja ki. Vagy egy + jelet kell a nyitózárójel elé tenni, vagy az összes argumentumot még egy zárójelpárba kell zárni.

Ha a FILEHANDLE neve egy tömb elemeként van megadva, vagy bármilyen más kifejezés értékeként, akkor a kifejezést kapcsos zárójelek közé kell tenni.

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


printf FILEHANDLE LIST

printf LIST
Ugyanaz, mint a print FILEHANDLE sprintf(LIST) utasítás. Az első argumentum adja meg a nyomtatási formátumot.
prototype FUNCTION
A függvény prototípusát adja meg, vagy undef értéket, ha a függvénynek nincsen prototípusa.
push ARRAY,LIST
Az ARRAY tömböt, mint egy vermet kezeli, és a LIST lista elemeit hozzáfűzi a tömb végéhez. Ennek megfelelően megnövekszik a tömb mérete. A visszatérési érték a tömb új mérete. Ugyanaz a hatása, mint a
for $value (LIST) {
  $ARRAY[++$#ARRAY] = $value;
  }


utasításnak, csak sokkal hatékonyabb.
q/STRING/

qq/STRING/

qx/STRING/

qw/STRING/
Általánosított idézőjel. Nem függvény, hanem operátor.
quotemeta EXPRESSION
Az EXPRESSION kifejezés, mint füzér értékét adja vissza úgy, hogy minden reguláris kifejezés meta-karakter \ karakterrel van megelőzve. Ez egy belső függvény, amely az idézőjelek között megadott füzérekben a \Q escape szekvenciát valósítja meg.
rand EXPRESSION

rand
Egy véletlen valós számot ad vissza 0 és EXPRESSION között (EXPRESSION értéke pozitív kell, hogy legyen). Ha EXPRESSION nincs megadva, akkor 0 és 1 közötti értéket ad vissza. Ez a függvény minden futáskor ugyanazt a szekvenciát adja vissza, kivéve ha a srand függvényt is használjuk.

Néhány Perl implementációban előfordulhat, hogy a rand függvény túl nagy, vagy túl kicsi értékeket ad vissza. Ennek oka, hogy a Perl értelmező fordításakor rosszul volt beállítva a RANDBITS C konstans. Ilyenkor az EXPRESSION kifejezést lehet az általában megfelelő kettő-hatvány értékkel megszorozni, de ezzel a program elveszti a hordozhatóságát. Sokkal jobb megoldás a megfelelő RANDBITS értékkel újrafordítani a programot.

read FILEHANDLE,SCALAR,LENGTH,OFFSET

read FILEHANDLE,SCALAR,LENGTH
Megpróbál LENGTH bájtnyi adatot a SCALAR változóba olvasni a megadott FILEHANDLE fájlkezelőből. A visszatérési érték a valóban beolvasott bájtok száma vagy undef ha hiba történt. SCALAR mérete nőni vagy csökkenni fog annak megfelelően, hogy mennyi adatot olvas be a read. Ha OFFSET-et megadjuk, akkor ezzel meghatározhatjuk, hogy a SCALAR változóban hányadik bájttól kezdődően helyezze el a read függvény a beolvasott bájtokat. Ez a függvény a C stdio könyvtár fread függvényével lett megvalósítva. A valódi rendszerhíváshoz a sysread függvényt kell használni.
readdir DIRHANDLE
Megadja a következő könyvtári bejegyzést abból a könyvtárból, amelyet az opendir függvénnyel nyitottunk meg. Ha lista környezetben használjuk, akkor a maradék könyvtári bejegyzések listáját adja meg. Ha nincs több bejegyzés akkor undef értéket ad vissza skaláris környezetben, vagy nulla hosszúságú listát lista környezetben.

Ha az így kapott értékeket, mint fájlneveket használod, akkor ne feledd el a megfelelő könyvtár nevet eléjük illeszteni, vagy egy chdir parancsot kiadni.

opendir(DIR, $some_dir) || die "$some_dir nem nyitható meg: $!";
@dots = grep { /^\./ && -f "$some_dir/$_" } readdir(DIR);
closedir DIR;
readlink EXPRESSION
Visszaadja a szimbolikus link értékét, ha a szimbolikus linkek a rendszeren implementálva vannak. Egyébként fatális hibát ad. Ha rendszerhiba történik a hívás során, akkor a visszatérési érték undef és $! tartalmazza a hibakódot. Ha EXPRESSION nincs megadva, akkor $_-t használja.
recv SOCKET,SCALAR,LEN,FLAGS
Fogad egy üzenetet a socket-en, Megpróbál LENGTH bájtnyi adatot fogadni a SCALAR változóba a SOCKET fájlkezelő által meghatározott socket-ből. A visszatérési érték a küldő címe. Hiba esetén a visszatérési érték undef. SCALAR mérete aszerint nő vagy csökken, hogy mennyi adatot kell tartalmaznia. FLAGS ugyanazokat az értékeket tartalmazhatja, mint a rendszerhívás.
redo LABEL

redo
The Nem függvény, hanem Perl parancs, amely egy ciklust indít újra. Hatása hasonló a next utasításhoz, de nem értékeli ki ismételten a ciklus feltételt, hanem egyszerűen a ciklus elejére ugrik és a continue blokkot sem hajtja végre. Ha a LABEL nincs megadva, akkor az utasítást bezáró legbelső ciklusra vonatkozik.
ref EXPRESSION
Visszatérési értéke TRUE? ha EXPRESSION kifejezés egy referencia (mutató) és FALSE egyébként. Az érték, amelyet visszaad attól függ, hogy mi az az objektum amelyre a referencia vonatkozik. A beépített típusok:
  • REF
  • SCALAR
  • ARRAY
  • HASH
  • CODE
  • GLOB
Ha a hivatkozott objektum egy osztályhoz tartozik (lásd bless), akkor az osztály/csomag nevét adja meg. A ref egy kicsit olyan, mint a C-ben a typeof operátor.
if (ref($r) eq "HASH") {