I/O folosind Pipe si Apelarea functiilor sistem.
Exemplu: Afisarea spatiului ocupat de fisiere pe disc.
#! usr/bin/perl
# 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 |'))
printf '%8s %-8s %-16s %8s %sn','K-Bytes','Login','Nume','Modificat','Fisier';
while (<DUPIPE>)
# 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 %sn',$kbytes, $login,$realname,$myear,$mmonth,$mday,$filename;
}
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 =~ efectueaza cautarea dupa un sablon si inlocuirea. de exemplu, daca
$s = 'Unu doi trei patru'';
atunci
if ($s =~/doi trei/) else
va tipari YES, deoarece sirul de caractere $s se potriveste cu sablonul 'doi trei'
if($s =~/unu/) else
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 =~ /one/i) else
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 =~ /l.mp/)
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 patrate[] se potrivesc cu un singur caracter definit de ele. De exemplu:
[0123456789] se potriveste cu orice cifra
[0-9] se potriveste cu orice cifra
[0-9]+ se potriveste cu orice secventa de cifre
[a-z]+ se potriveste cu orice cuvant scris cu litere mici
[A-Z]+ se potriveste cu orice cuvant scris cu litere mari
[ab n]* se potriveste cu sirul null '', sirul 'b', orice numar de spatii,'banana an nnna'
[^] se potriveste cu orice caracter care nu este ''
[^0-9] se potriveste cu orice caracter care nu este cifra
Acoladele permit o specificare mult mai precisa a sirurilor care se repeta. Astfel [0-9] se potriveste cu orice sir de cifre de lungime 6, iar [0-9] 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 patrate[], 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'.
/^[ t]*$/ 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:+ ? . [] () . Acestea trebuie prefixate cu un backslash pentru a fi considerate ca si caractere.
Bara verticala | este operatorul binar sau. Exemplu:
if ($answer =~/^y | ^yes |^yeah/i)
va afisa 'Afirmativ' pentru: y, yes, Yes, Yeah, Yeah rigth,etc