duminică, 8 noiembrie 2015

ATELIER -> Perl caracteristici generale

In randurile urmatoare vom incerca sa va prezentam caracteristicile principale ale limbajului:
  • sintaxa - limbajul Perl are o sinataxa case-senzitive, comentariile sunt precedate de caracterul # si fiecare instructiune este terminata cu ; acoladele sunt delimitatori  de bloc de instructiuni {};
  • tipuri de date si variabile
O variabila reprezinta o zona de memorie in care se stocheaza o valoare de un anumit tip, acestei zone i-se asociaza  un nume. Tipurile de date in Perl sunt fie scalare (simple) fie compuse (complexe).

Tipurile de date scalare sunt numerele intregi si cele flotante (9.78) cat si un sir de caractere, iar acestea sunt initializate in cazul numerelor cu valoarea 0 iar in cazul caracterelor cu " " - un sir vid. Exemple:

   $nr_telefon++;
   $pi= 3.14152965;
   $limbaj= "Perl";

Flexibilitatea limbajului Perl permite delimitarea sirurilor si in acest mod:

 q/Mihai Cornel/  #identic cu 'Mihai Cornel'
qq/Mihai Cornel/  #identic cu "Mihai Cornel"
 qx/ls -la/ # executia unei comenzi, identic cu `ls -la`  
qw/Perl Python Java/ # lista de cuvinte

Tipurile complexe de date:
  • tablourile indexate  sunt liste ordonate de scalari, acesibile prin intermediul unui indice numeric. Numele unui vector va fi precedat de caracterul @ iar indicele va porni de la zero.
   @absenti[$nr_studenti] =20;
@linbaje=("Ada", "perl", "Java", "Python");
@mix=("Rosu", 123, $pi, "Radu");

 Pentru accesarea unui element se inlocuieste caracteru @ cu $ pentru ca selectam un singur element: $limbaj[2];

Se poate accesa un subtablou specificand un interval si acesta va fi prefixat cu @;

print "Primele trei limbaje : @limbaje[0..2]\n";

Pentru adaugarea si stergerea de elemente la sfarsitul unui tablou utilizam functiile predefinite push() si pop():

push(@limbaje, "JavaScript");
print "Ultimul limbaj eliminat:", pop(@limbaje);

Daca dorim sa adaugam si sa stergem elemente la inceput utilizam functiile unshift() si shift();

Lungimea unui tablou poate fi aflata cu (ambele constructii au acelasi efect):

$nr_limbaje = @limbaje;
$nr_limbaje = scalar(@limbaje);

Vom obrtine indexul ultimului element:

$nr_limbaje = @#limbaje;

Pentru ca elementele unui tablou sa devina cuvinte ale unui sir de caractere, utilizam constructia:

$sir= "@limbaje";

Elementele tabloului vor fi delimitate de un spatiu. Pentru   aschimba delimitatorul:

$" = "|";
$sir = "@limbaje";
print $sir, "\n";

Tablourile pot fi utilizate si in partea stanga a unei atribuiri;

($primul, $al_doilea)= @limbaje;
($prima, @restul)= @limbaje;

Variabila $primul va primi valoarea primului element al tabloului @limbaje, iar $al_doilea valoarea celui de-al doilea element din tablou. A doua linie, $prima ia valoarea primului element din tablou, iar @restul va fi un tablou continand restul de elemente din tabloul @limbaje.

Atribuirile multiple de variabile scalare se poate face in acest mod:
($oameni, $animale) = ($romani, 123);

Avand acelasi efect cu:
 $oameni = $romani;
$animale = 123;


    • tablouri asociative (hash) - sunt perechi cheie valoare declarate cu caracterul % 

    #!/usr/bin/perl
    use warnings;
    use strict;
    #use utf8;
    #---------------------------------------------------------------------
    # Acesta este un tablou asociativ (hash) format dintr-o cheie si o valoare.
    # Mai jos aveti codurile oraselor din Romania cheia este un nr. iar valoare 
    #este un string. Cheile trebuie sa fie unice.
    #-------------------------------------------------------------------------
    my %codul = (
            1  => 'București',
            30 => 'Suceava',
            31 => 'Botoșani',
            32 => 'Iași',
            33 => 'Neamț',
            34 => 'Bacău',
            35 => 'Vaslui',
            36 => 'Galați',
            37 => 'Vrancea',
            38 => 'Buzău',
            39 => 'Brăila',
            40 => 'Tulcea',
            41 => 'Constanța',
            42 => 'Călărași',
            43 => 'Ialomița',
            44 => 'Prahova',
            45 => 'Dâmbovița',
            46 => 'Giurgiu',
            47 => 'Teleorman',
            48 => 'Argeș',
            49 => 'Olt',
            50 => 'Vâlcea',
            51 => 'Dolj',
            52 => 'Mehedinți',
            53 => 'Gorj',
            54 => 'Hunedoara',
            55 => 'Caraș-Severin',
            56 => 'Timiș',
            57 => 'Arad',
            58 => 'Alba',
            59 => 'Bihor',
            60 => 'Sălaj',
            61 => 'Satu Mare',
            62 => 'Maramureș',
            63 => 'Bistrița-Năsăud',
            64 => 'Cluj',
            65 => 'Mureș',
            66 => 'Harghita',
            67 => 'Covasna',
            68 => 'Brașov',
            69 => 'Sibiu',
            );
    # Aici obtinem valorile pentru chei $codul{23}. Intre acolade sunt specificate 
    #doar numele de chei(aici numere)        
    print "Codul 37 este pentru $codul{37}.\n";
    print "Codul 39 este pentru $codul{39}.\n";
    # Aceste liste pot fi iterate cu ajutorul instructiunii foreach, iar functia each()
    #returneaza o pereche cheie-valoare
    while((my $codul, my $orasul) = each(%codul)){
            print "Codul $codul este pentru $orasul.\n";
    }
    # Adaugarea de elemente se poate face prin
    $codul{70}="Crevedia";
    print "Codul 70 este pentru $codul{70}.\n";
    # Un element se poate sterge cu functia delete(), iar existenta unui element
    #cu exists()
    #if exists ($codul{55}) {
     #       delete($codul{55});
    #}
    print "Codul 55 este pentru $codul{55}.\n";
    # Pentru sortarea unui tablou se utilizeaza sort() iar pentru inversare
    #reverse()
    
       

    Niciun comentariu:

    Trimiteți un comentariu