Referate Meniu
Astronomie
Biologie
Chimie
Desen
Diverse
Drept
Economie
Engleza
Filozofie
Fizica
Franceza
Geografie
Germana
Informatica
Istorie
Italiana
Marketing
Matematica
Medicina
Muzica
Psihologie
Romana
Romana1
Spaniola


 


referat, proiect, rezumat, caracterizare, lucrare de nota 10 despre:

IO folosind Pipe si Apelarea functiilor sistem in Perl

I/O folosind Pipe si Apelarea functiilor sistem.

dz285u7216tzzg Exemplu: Afisarea spatiului ocupat de fisiere pe disc.

#! usr/bin/perl

# Afisarea spatiului ocupat de fisierele specificate 27285udm16tzg7l

# 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

dz285u7216tzzg

$files = join(' ',@ARGV);

dz285u7216tzzg

# Semnul | redirecteaza datele afisate de du catre programul nostru

if(! open(DUPIPE,"du -sk $files | sort -nr |")){

die "Nu pot rula du! $!\n";

}

printf "%8s %-8s %-16s %8s %s\n",'K-Bytes','Login','Nume','Modificat','Fisier';

while (<DUPIPE>){

# 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){

($login,$passwd,$uid,$gid,$quota,$coment,$realname,$dir,$shell) = getpwuid($uid);

$realname = split(', ',substr($realname,0,20));

$previous_uid = $uid;

}

# 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;

}

Exemplu de rezultat afisat de program:

dz285u7216tzzg

K-bytes Login Nume Modificat Fisier

12345 mr28602 Muresan Robert 99-10-10 abc.txt

12. Cautare.

dz285u7216tzzg 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/) {print YES} else {print NO}

va tipari YES, deoarece sirul de caractere $s se potriveste cu sablonul "doi trei"

if($s =~/unu/){print YES} else {print NO}

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) {print YES} else {print NO}

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/){print YES}

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

dz285u7216tzzg

Acoladele permit o specificare mult mai precisa a sirurilor care se repeta. Astfel [0-9]{6} se potriveste cu orice sir de cifre de lungime 6, iar [0-9]{6,10} 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){

print "Afirmativ";

}

va afisa "Afirmativ" pentru: y, yes, Yes, Yeah, Yeah rigth,etc...