Některé předdefinované funkce

caller

skalární kontext
#!/usr/bin/perl
# skript s názvem pokus
sub a {
    print join ', ', caller;
}

a;   # vytiskne 'main, pokus, 7
seznamový kontext
($balik, $soubor, $radek, $podprogram, $hashargs, 
$wantarray, $evaltext, $is_require, $hints, $bitmask) = caller $n;

#!/usr/bin/perl
sub a{
print join ', ', caller 0;
print "\n";
print join ', ', caller 1;
}

package B;
sub b{
main::a;
}

b;

# vytiskne
B, pokus, 10, main::a, 1, , , , 0,
B, pokus, 13, B::b, 1, , , , 0,

chdir

chdir
chdir VÝRAZ

chmod

chmod SEZNAM
Prvním argumentem je číslo v osmičkové soustavě (ne řetězec!!!)
chmod 0700, 'soubor1';
#-rwx------    1 darena   darena    20 říj 22 15:21 soubor1
chmod '0700', 'soubor1';
#--w-rwxr-T    1 darena   darena    20 říj 22 15:21 soubor1

chomp

chomp
chomp PROMĚNNÁ
chomp SEZNAM

chop

chop
chop PROMĚNNÁ
chop SEZNAM

crypt

crypt TEXT, SŮL
crypt TEXT, ZAŠIFROVANÝ_TEXT
# proměnná $heslo obsahuje zadané heslo
# proměnná $zasifrovane obsahuje zašifrované heslo

if (crypt($heslo, $zasifrovane) ne $zasifrovane) {
     # chyba
} else {
     # v pořádku
}

die

die
die SEZNAM

Funkce se chová různým způsobem podle toho, kde byla volána. Je-li volána mimo blok eval, na standardní chybový výstup vypíše seznam zadaný jako argument a ukončí provádění programu s chybovým kódem uloženým v proměnné $!. Není-li tato proměnná nastavena, použije se hodnota proměnné $? bitově posunutá o 8 míst doprava. Je-li tato hodnota nulová, program se opustí s kódem 255. Není-li na konci seznamu znak nového řádku, vypíše se navíc na chybový výstup jméno skriptu a číslo řádku, kde se funkce die volá, a přidá se znak nového řádku. V opačném případě se pouze vypíše seznam argumentů.

die "chyba", " chyba";
# vytiskne 'chyba chyba at pokus line 1' a znak nového řádku

die "chyba\n"; # die "chyba","\n";
# vytiskne 'chyba' a znak nového řádku
Uvnitř bloku eval volání funkce die vyvolá výjimku tím způsobem, že nastaví proměnnou $@ na hodnotu zadanou jako argument funkci die a návratovou hodnotu funkce eval nastaví na nedefinovanou hodnotu.
eval {
     die "chyba\n";
} or print "Došlo k chybě: $@";

# vytiskne 'Došlo k chybě: chyba'

do

do BLOK
do VÝRAZ
do PODPROGRAM
Je-li funkce do volána s blokem příkazů, provede se tento blok a návratovou hodnotou bude hodnota posledního výrazu.
print do {1; 2; 3}; # vytiskne '3'
Voláme-li operátor do s výrazem, je tento výraz interpretován jako jméno souboru a tento soubor je proveden jako program v jazyce Perl. Návratovou hodnotou je hodnota posledního výrazu v souboru.
Soubor skript.pl
$a = 1;

Skript do.pl
print do 'skript.pl';      # vytiskne '1' 
Při použití operátoru do před jménem podprogramu se provede příslučný podprogram a návratová hodnota funkce do bude hodnota posledního výrazu podprogramu. Chceme-li předat podprogramu nějaké argumenty, musejí být uzavřeny v závorkách (aby se odlišilo volání operátoru do z výrazem). V opačném případě nejsou předány žádné argumenty. Předáme-li operátoru do skalární proměnnou, bude se volat podprogram, jehož jméno je obsaženo v této proměnné.

eof

eof
eof()
eof OVLADAČ
Použijeme-li funkci eof na ovladač souboru (nebo na výraz, jehož výsledkem je ovladač), získáme pravdivou hodnotu (1) v případě, že při čtení ze soboru by dalším znakem byl znak konce souboru nebo je-li soubor uzavřený. Funkce provádí to, že přečte následující znak a vrátí ho zpět (funkcí ungetc).
print 'Konec souboru' if eof(SOUBOR);
Volání funkce eof bez argumentů znamená použití posledního čteného souboru.
$x = <SOUBOR1>;
$y = <SOUBOR2>;

print 'Konec souboru' if eof; 
# vytiskne se pouze v případě, že jsme na konci souboru SOUBOR2
Je-li funkce eof volána s prázdným seznamem argumentů, vrací pravdivou hodnotu, nacházíme-li se na konci posledního souboru zadaného jako seznam argumentů. Většinou se používá ve spojení s operátorem <> uvnitř cyklu while (<>).
while (<>) {
     print ;
     print "Konec posledního souboru\n" if eof();
}

# při volání toho to skriptu s argumenty 'soubor1 soubor2 soubor3',
# které obsahují jeden řádek s textem 'obsah souboru souborN',
# se vytiskne
obsah souboru soubor1
obsah souboru soubor2
obsah souboru soubor3
Konec posledního souboru
Podobný příklad při volání eof bez argumentů by vypadal následovně:
while (<>) {
     print ;
     
     print "Konec souboru\n" if eof;
     print "Konec posledního souboru\n" if eof();
}

# při volání toho to skriptu s argumenty 'soubor1 soubor2 soubor3'
# se vytiskne
obsah souboru soubor1
Konec souboru
obsah souboru soubor2
Konec souboru
obsah souboru soubor3
Konec souboru
Konec posledního souboru

exit

exit		# jako exit 0
exit VÝRAZ
Je-li definován blok END, je před ukončením programu volán ještě tento blok.

goto

goto NÁVĚŠTÍ
goto VÝRAZ
goto &JMÉNO_FUNKCE

První forma funkce slouží k předání řízení programu na místo, kde se nachází zadané návěští. Při hledání návěští se nejprve hledá v aktuálním rozsahu platnosti, není-li zde návěští nalezeno, hledá se o úroveň výš do té doby, než je návěští nalezeno. Je-li návěští stejného jména na jedné úrovni více, postupuje se od prvního. Není-li návěští nalezeno, dojde k chybě.

sub funkce {
    print 'funkce '; 
    goto A;
}
A: print 'prvni ';
A: print 'druhe ';

exit if $i++ == 2;  # aby se příkazy neprováděly do nekonečna
funkce;

# vytiskne se
# prvni druhe funkce prvni druhe funkce prvni druhe
Řízení běhu programu pomocí skoků není ve většině případů vhodné, často stačí použít např. příkaz pro řízení cyklu.

Použijeme-li jako argument výraz, je po vyhodnocení považován za jméno návěští.

Zadáme-li jako argument jméno podprogramu, je volání současně běžící funkce nahrazeno voláním zadané funkce.

sub funkce2 {
    print join(', ', caller), "\n";
}
sub funkce1 {
    print join(', ',caller), "\n"; 
    funkce2;  # řádek 6
}
funkce1;      # řádek 8

# vytiskne se
# main, pokus.pl, 8
# main, pokus.pl, 6
Tato změna není zachytitelná ani pomocí funkce \verb|caller|. Její výsledek vypadá, jako by byla volána přímo funkce zadaná jako argument funkci goto.
sub funkce2 {
    print join(', ', caller), "\n";
}
sub funkce1 {
    print join(', ',caller), "\n"; 
    goto &funkce2;  # řádek 6
}
funkce1;            # řádek 8

# vytiskne se
# main, pokus.pl, 8
# main, pokus.pl, 8
Jméno podprogramu opět nesmíme změňovat s jeho voláním (použijeme prefix &, nesmíme použít kulaté závorky za jménem funkce), v tom případě by to znamenalo variantu s výrazem a hledalo by se návěští se jménem, které by bylo návratovou hodnotou funkce. Funkci jsou předány argumenty v poli @_, chceme-li seznam argumentů změnit, musíme provést změnu tohoto pole.
sub funkce2 {
    print "@_\n";
    print join(', ', caller), "\n";
}
sub funkce1 {
    print "@_\n";
    print join(', ',caller), "\n"; 
    @_=(1,2,3,4);
    goto &funkce2;
}
funkce1 ('a','b','c');

# vytiskne se
# a b c
# main, pokus.pl, 11
# 1 2 3 4
# main, pokus.pl, 11

grep

grep VÝRAZ, SEZNAM
grep BLOK SEZNAM
Funkce prochází zadaný seznam a postupně pro každou hodnotu vyhodnocuje zadaný blok nebo výraz. Aliasem pro jednotlivé prvky seznamu se stává proměnná $_ podobně jako u cyklu \verb|foreach|. Návratovou hodnotou v seznamovém kontextu je seznam, který obsahuje prvky, pro které bylo vyhodnocení výrazu nebo bloku pravdivé. Ve skalárním seznamu je vrácen počet těchto prvků.
@hmotnosti = ('10 t', '100 kg', '80 g', '150 kg');

# chceme vypsat hmotnosti zadané v kilogramech
print join ',', grep /\s+kg/, @hmotnosti;  # vytiskne '100 kg, 150 kg'
# nebo grep {/\s+kg/} @hmotnosti

# počet hmotností zadaných v kilogramech
print scalar grep /\s+kg/, @hmotnosti;     # vytiskne 2
Modifikací proměnné \verb|$_| dochází také k modifikaci hodnot původního senzamu.
my @hmotnosti = ('10 t', '100 kg', '80 g', '150 kg');

print join ',',grep s/\s+kg//, @hmotnosti;   # vytiskne 100, 150
print join ',', @hmotnosti;                  # vytiskne '10 t,100,80 g,150'