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:

Literali si Operatori, Bucle si sistemul IO in Perl

Literali si Operatori

Exemple: Numere si Caractere

#!usr/bin/perl

print '013' , 'este numar prim', 004, ' nu este numar prim.'; 47242jvk77sex6e

print 7 + 3,' ' , 7 - 3

$x = 7;

print $x

print 'Nu afiseaza variabila $x si linie noua \n .' ve242j7477seex

print 'Afiseaza $x si line noua \n'

$y = "Linie ce contin $x si se termina cu salt la linie noua \n."

print $y;

$y = "Con"."catena"."re";

print $y

Acest program va afisa:

013 este numar prim 4 nu este numar prim. 10 4 Nu afiseaza variabila $x si linie noua \n.Afiseaza 7 si linie noua

Linie ce contine 7 si se termina cu salt la linie noua

Concatenare

Observam ca instructiunea print nu sare la linie noua decat daca se specifica caracterul \n intre ghilimele "". Aceasta o greseala des intalnita in programele Perl.

Totodata observam operatorul . (punct) care are ca efect concatenarea celor trei siruri de caractere.

Exemple: Comparatiile

O greseala des intalinta in programele Perl este confundarea operatorului de atribuire = cu operatorul de comparare numerica ==.

Totodata este recomandata folosirea operatorilor eq, ne, lt, gt pentru siruri de caracatere:

if ( $x eq 'unu')

{

print 'Siruri egale.'

}

Bucle si sistemul I/O in Perl.

Exemplu: Parametrii in linia de comanda si bucle iterative

print "$#ARGV este indicele ultimului argument din linia de comanda.\n"

# Itereaza de la indicele 0 pana la indicele $#ARGV:

# Observam ca , constructia for este similara cu cea din C

for($i = 0; $i <= $#ARGV; $i++)

{

print "Paramtrul $i este $ARGV[$i].\n";

}

# O alta varianta a buclei de mai sus

foreach $item(@ARGV)

{

print "Cuvantul este: $item. \n";

}

# O varianta similara folosind de data asta variabila implicita Perl $_

foreach (@ARGV)

{

print "Spun: $_ . \n";

}

Rularea programului va afisa:

> perl exemplu.pl Buna Dimineata, Elevi!

2 este indicele ultimului argument din linia de comanda

Parametrul 0 este Buna.

Parametrul 1 este Dimineata,.

Parametrul 3 este Elevi!

Cuvantul este: Buna.

Cuvantul este: Dimineata,.

Cuvantul este: Elevi!

Spun: Buna.

Spun: Dimineata,.

Spun: Elevi!.

 

Exemplu: Sistemul standard I/O

print STDOUT "Tastati un text: ";

while($input = <STDIN>)

{

chop $input;

print STDOUT "Ati tastat : $input \n"

if ($input eq '') {print STDERR "Nu ati tastat nimic!\n"}

print STDOUT "Mai tastati ceva sau apasati CTRL - D pentru terminare"

}

print STDOUT "Atat a fost."

Obs1. Conditia din directiva while este o directiva de asignare, asigneaza urmatoarea inregistrare de la intrarea standard, variabilei $input. La sfarsit de fisier acesta nu va asigna variabilei $input valoarea null, ci o valoare nedefinita, care in acest context este evaulata ca fiind null. Deci lini a while($input = <STDIN>) face trei lucruri: citeste o inregistrare, o asigneaza variabilei $input si verifica daca $input este nedefinita, in acest context ea fiind evaluata la valoarea null. In alte contexte, Perl evauleaza o variabila ca fiind zero sau null. De exemplu daca $i nu este definita, atunci $i++ va atribui variabilei $i valoare 1. De aici rezulta al treilea paradox Perl: Side effects can yield an elegant face or a pain in the rear. Efectele secundare pot conduce la lucruri elegante sau batai de cap.

Obs2. Campurile de date sunt in mod implicit delimitate de caracterul \n, care in exemplul de mai sus este inclus ca si ultimul caracter al variabilei $input. Functia chop elimina acest ultim caracter din variabila $input. In Perl 5 este introdusa o noua functie chomp care elimina ultimele caractere doar daca acestea sunt definite ca delimitatori de inregistrari, prin variabila globala $/.

Exemplu: Executarea unui string ca si porgram Perl

#!usr/bin/perl

for(;;){

print '(', join(', ',@Result),') ?';

last unless $Input = <STDIN>;

$? = ''; $@ = ''; $! = '';

@Result = eval $Input;

if ($?) {print 'status=', $?,' '}

if ($@) {print 'eroare=', $@,' '}

if($!) {print 'nreroare=',$!+0,': ',$!',' '}

}

Functia eval, evalueaza un sir de caractere interpretand-ul ca un program scris in Perl. $@ reprezinta mesajul de eroare rezultat din ultimul apel al functiei eval sau do.

Rularea programului va afisa:

>perl perls.pl

() ? sqrt(2)

(1.4142)

Exemplu: I/O cu fisiere

#! usr/bin/perl

# program pentru inversarea fiecarei linii dintr-un fisier.

# 1: Obtinerea numelui fisierelor din parametrii transmisi in linia de comanda

if($#ARGV != 1){

die "Folosire: $0 fisier_sursa fisier_destinatie \n";

}

($infile,$outfile) = @ARGV;

if (! -r $infile){

die "Nu pot citi fisierul de intrare $infile \n";

}

#2: Validarea fisierelor

# Daca prima parte a expresiei in cazul operatorului || (or) este adevarata, Perl # nu mai evalueaza si restul continutului. Daca fisierul de intrare sa putut

# deschide atunci executia programului continua, altfel se evalueaza instructiunea # die si executia programului se incheie.

open($INPUT,"<$infile") || die "Nu pot deschide fisierul $infile ! \n";

if( -e $outfile){

print STDERR "Fisierul $outfile exista!\n";

until ($ans eq 'i' || $ans eq 'a' || $ans eq 'e'){

print STDERR "Inlocuiesc, Adaugare, or iEsire?";

$ans = getc(STDIN);

}

if ($ans eq 'e') {exit}

}

if ($ans eq 'a') {$mode = '>>'}

else {$mode = '>'}

open(OUTPUT,"$mode$outfile") || die "Nu pot deschide fisierul destinatie!";

#3: Citeste fiecare linie din fisierul sursa, inverseaza linia si o scrie in fisierul # destinatie

while(<INPUT>){

chop $_;

$_ = reverse $_;

print OUTPUT $_,"\n";

}

#4: Terminare

close INPUT, OUTPUT;

exit;