Exemplu: Afisarea spatiului ocupat de fisiere pe disc.
#! usr/bin/perl p4b5bd
# Afisarea spatiului ocupat de fisierele specificate
# Acest program apeleaza functia sistem (Unix) du din care obtine numele # fisierului
si numarul de bytes ocupati, si reuneste aceste informatii cu alte # informatii
utile
$files = join(' ',@ARGV);
# Semnul | redirecteaza datele afisate de du catre programul nostru
if(! open(DUPIPE,"du -sk $files | sort -nr |"))A die "Nu pot rula du! $!\n";
S printf "%8s %-8s %-16s %8s %s\n",'K-Bytes','Login','Nume','Modificat','Fisier';
while (<DUPIPE>)A
# proceseaza informatiile afisate de du
($kbytes,$filename) = split;
# apel sistem pentru aflarea mai multor informatii despre fisier
($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,$atime,$mtime,$ctime) = stat($filename);
#apel sistem pentru a asocia login si nume cu uid if($uid != $previous_uid)A
($login,$passwd,$uid,$gid,$quota,$coment,$realname,$dir,$shell) = getpwuid($uid);
$realname = split(', ',substr($realname,0,20));
$previous_uid = $uid;
S
# Converteste timpul ultimei modificari intr-o forma mai usor de citit
($sec,$min,$hour,$mday,$mon,%myear) = localtime($mtime);
$mmonth = $mon + 1;
printf "%8s %-8s %-16s %02s-%02d-%02d %s\n",$kbytes, $login,$realname,$myear,$mmonth,$mday,$filename;
S
Exemplu de rezultat afisat de program:
K-bytes Login Nume Modificat Fisier
12345 mr28602 Muresan Robert 99-10-10 abc.txt
12. Cautare.
Cautarea implica folosirea unor sabloane numite expresii regulare. Dupa cum
se va vedea, aceasta da nastere la al patrulea paradox Perl: Regular expresion
aren't. Expresiile regulare nu sunt(regulare).
Operatorul =I efectueaza cautarea dupa un sablon si inlocuirea. de exemplu,
daca
$s = 'Unu doi trei patru''; atunci if ($s =I/doi trei/) Aprint YESS else Aprint NOS va tipari YES, deoarece sirul de caractere $s se potriveste cu sablonul "doi
trei" if($s =I/unu/)Aprint YESS else Aprint NOS va tipari NO deoarece sirul nu se potriveste cu sablonul. Adaugand insa optiunea
i pentru a ignora diferenta intre caracterele mari si caracterele mici, atunci
urmatoarele linii vor afisa YES. if($s =I /one/i) Aprint YESS else Aprint NOS
Sabloanele pot contine o serie larga de optiuni pentru a face cautarea cat
mai flexibila si generala.De exemplu un .(punct) se potriveste cu orice caracter,
exceptand caracterul \n. if($s =I /l.mp/)Aprint YESS
va tipari YES pentru $s = "lamp", "lump", "slumped",
dar nu si pentru $s = "lmp",sau "less amperes".
Parantezele () grupeaza elementele sablonului. Un asterisk * inseamna ca, caracterul,
elementul, sau grupul de elemente anterior poate sa apara de mai multe ori sau
deloc.Simila plus + inseamna ca elementul sau grupul de elemente anterior trebuie
sa apara cel putin odata.Semnul intrebarii se potriveste cu o singura aparitie
sau nici o aparitie.Exemple:
/fr.*nd/ se potriveste cu "frnd", "friend", "front
and back"
/fr.+nd/ se potriveste cu "frond", "friend", "front
and back" dar nu se potriveste cu "frnd".
/10*1/ se potriveste cu "11", "101", "1001", "100000001".
/b(an)*a/ se potriveste cu "ba", "bana", "banana",
"banananana"
/flo?at/ se potriveste cu "flat" and "float" dar nu se potriveste cu "flooat"
Parantezele patrateai se potrivesc cu un singur caracter definit de ele. De
exemplu:
a0123456789i se potriveste cu orice cifra
a0-9i se potriveste cu orice cifra
a0-9i+ se potriveste cu orice secventa de cifre
aa-zi+ se potriveste cu orice cuvant scris cu litere mici
aA-Zi+ se potriveste cu orice cuvant scris cu litere mari
aab ni* se potriveste cu sirul null "", sirul "b", orice
numar de spatii,"banana an nnna"
a^...i se potriveste cu orice caracter care nu este "..."
a^0-9i se potriveste cu orice caracter care nu este cifra
Acoladele permit o specificare mult mai precisa a sirurilor care se repeta.
Astfel a0-9iA6S se potriveste cu orice sir de cifre de lungime 6, iar a0-9iA6,10S
se potriveste cu orice sir de cifre care are lungime cuprinsa intre 6 si 10.
Sabloanele pot sa apara oriunde in sirul de caractere daca nu sunt ancorate.Semnul
^ pus in afara parantezelor patrateai, ancoreaza sablonul la inceputul sirului
de caractere, iar caracterul $ ancoreaza sablonul la sfarsitul sirului de caractere.De
exemplu:
/at/ se potriveste cu "at", "attention", "flat",
si "flatter"
/^at/ se potriveste cu "at" si "attention" dar nu si cu
"flat"
/at$/ se potiveste cu "at" si "flat", dar nu si cu "attention"
/^at$/ se potriveste doar cu "at".
/^at$/i se potriveste cu "at", "At", "aT", si
"AT".
/^a \ti*$/ se potriveste cu o linie goala, sau cu o linie ce contine oreice
combinatie de spatii libere sau taburi
Caracterul Backslash. In general caracterele se potrivesc cu ele insele, cu
exceptie caracterelor speciale de control cum ar fi:+ ? . ai () AS. Acestea
trebuie prefixate cu un backslash \ pentru a fi considerate ca si caractere.
Bara verticala | este operatorul binar sau. Exemplu:
if ($answer =I/^y | ^yes |^yeah/i)A print "Afirmativ";
S va afisa "Afirmativ" pentru: y, yes, Yes, Yeah, Yeah rigth,etc...