# Aceste exemple demonstrează modul de manipulare a variabilelor @array # Pentru început se inițializează o variabilă de tip array numită @gene @gene = ('CAPZA2', 'TFEC', 'CFTR', 'LOC51691', 'LOC56311'); # @gene = (CAPZA2, TFEC, CFTR, LOC51691, LOC56311); # Nu este acceptata în cazul use strict # @gene = qw(CAPZA2 TFEC CFTR LOC51691 LOC56311); print "\n"; print 'Afisarea tuturor valorilor din variabila @gene: ',"\n"; print " @gene\n"; print 'Valoarea scalarului de la indexul 1 apartinand variabilei @gene este: ',"$gene[1]\n\n"; $gene[1] = 'ING3'; print 'Inlocuirea unei valori de la un index cunoscut $gene[1] = ING3',"\n"; print " @gene\n"; $gene[5] = 'FLJ21986'; print 'Adaugarea unei valori la un index cunoscut $gene[5] = FLJ21986',"\n"; print " @gene\n"; $gene[7] = 'WNT16'; print 'Adaugarea unei valori la un index cunoscut $gene[7] = WNT16',"\n"; print " @gene\n\n"; print "Index-ul maxim al array-ului este: ", $#gene,' ca rezultat al instructiunii: $#gene',"\n"; print "Numarul de componente din array este: ", scalar @gene,' ca rezultat al instructiunii: scalar @gene',"\n"; $n = @gene; # Exploatarea unui array într-un mediu scalar. print "Numarul de componente din array este: $n",' ca rezultat al instructiunii: $n = @gene',"\n"; print "Ultima componenta a array-ului: $gene[-1]",' ca efect al instructiunii: $gene[-1]',"\n\n"; print "Adaugarea unei/unor valori utilizand operatorul simplu de atribuire:\n"; print 'In urma instructiunii @gene = (@gene, KCND2) variabila @gene are urmatoarea configuratie:',"\n"; @gene = (@gene,'KCND2'); print " @gene\n\n"; # Eliminarea elementelor dintr-un array, funcția splice. # Opțional, componentele eliminate pot fi înlocuite cu altele dacă se specifică acest lucru. # Splice funcționează și fără invocarea operatorului de atribuire. # Indiferent cum este utilizată, splice alterează iremediabil datele din array. @gene_ramase = splice (@gene, 1, 2, CASP8, PON1); print 'Rezultatul functiei splice aplicata astfel: splice (@gene, 1, 2, CASP8, PON1)',"\n"; print " @gene\n\n"; print 'Extragerea unor componente prin copiere din array fara alterarea acestuia'; @gene_selectate = @gene[0..2,4]; print "Array-ul initial este:\n @gene\n"; print 'Dupa selectia componentelor 0..2,4',"\n"; print "Elementele copiate din array sunt:\n @gene_selectate\n\n"; # Cazuri de inițializare de array-uri cu caracter particular predefinit. @zece = (1 .. 10); @o_suta = (1 .. 100); @o_mie = (100 .. 1000); @alfabet = (a .. z); @ALFABET = (A .. Z); # print "@zece\n"; # print "@o_suta\n"; # print "@o_mie\n"; # print "@alfabet\n"; # print "@ALFABET\n\n"; print "Functii pentru adaugarea sau eliminarea unui singur element din array\n"; print "Array-ul initial este:\n @gene\n\n"; push(@gene, 'CAV1' , 'CAV2'); print 'push(@gene, CAV1, CAV2)',"\n"; print "push adauga unul sau mai multe elemente la sfarsit:\n @gene\n\n"; unshift(@gene, 'GPR85' , 'NET-2'); print 'unshift(@gene, GPR85, NET-2)',"\n"; print "unshift adauga unul sau mai multe elemente la inceput:\n @gene\n\n"; pop(@gene); print 'pop(@gene)',"\n"; print "pop elimina ultimul element:\n @gene\n\n"; shift(@gene); print 'shift(@gene)',"\n"; print "shift elimina primul element:\n @gene\n"; print "Functiile pop si shift se pot combina si cu operatorul de atribuire\n\n"; # Parcurgerea array-ului cu ajutorul instrucțiunii de control foreach. # Aceasta este varinata cea mai scurtă pentru a extrage valorile componentelor din @gene. # Se exploatează variabila predefinită (internă/specială) $_ . # De fiecare dată când este identificat un # nou index valid se inițializează $_ cu valoarea gasită la acel index. print 'Executia lui foreach folosind variabila $_',"\n"; foreach (@gene) { print "\t$_\n"; } print "\n"; # Variantă alternativă ce implică o variabilă scalară $valoare introdusă de utilizator. # Această variabilă se inițializează la fiecare execuție a ciclului # cu valoarea componentei identificată la indexul curent al array-ului prin intermediul $_ . # Ciclul se încheie când au fost parcurse toate componentele. # Avantajul acestei soluții constă în posibilitatea modificării variabilei $valoare, # acest lucru fiind imposibil de efectuat asupra variabilei $_ aceasta fiind read-only. print 'Executia lui foreach folosind variabila $valoare',"\n"; foreach $valoare (@gene) { print "\t$valoare\n"; } print "\n"; # Acest exemplu este similar cu cel anterior, el scoate în evidență o particularitate # a comportamentului foreach în cazul în care variabila $valoare este modificată # în timpul parcurgerii array-ului. Modificările ce afectează valorile stocate în $valoare # se răsfrâng în final asupra valorilor conținute în @gene. print 'Efectul executiei foreach modificand valoarea variabilei $valoare',"\n"; print 'De fiecare data valoarea variabilei $valoare este modificata cu <<',"\n"; print 'Continutul variabilei @gene este urmatorul:',"\n"; foreach $valoare (@gene) { $valoare .= '<<'; } print " @gene\n\n"; # În acest exemplu foreach exploatează o listă obținută pe baza # unui interval de la 0 la index-ul maxim al array-ului @gene. # Aceste valori devin soluțiile variabilei $index # și indirect pozițiile (indexul) pentru a ajunge la valorile din @gene. print 'Executia lui foreach folosind intervalul determinat de 0..$#gene',"\n"; foreach $i (0..$#gene) { print "\tComponenta\t$i\t$gene[$i]\n"; } print "\n"; print 'Unirea componentelor array-ului intr-un singur sir (string) folosind join',"\n"; print "Atentie la primul parametru al functiei join\n\n"; @gene = ('NET-2','CAPZA2','CASP8','PON1','LOC51691','LOC56311','FLJ21986','','WNT16','KCND2','CAV1'); print "Array-ul are urmatoarele componente:\n @gene\n"; $unificare = join("",@gene,'DKFZP586B2022'); print 'Efectul functiei join folosind parametrul ""',"\n"; print " $unificare\n\n"; print "Array-ul are urmatoarele componente:\n @gene\n"; $unificare = join(" ",@gene,'TTT'); print 'Efectul functiei join folosind parametrul " "',"\n"; print " $unificare\n\n"; print "Array-ul are urmatoarele componente:\n @gene\n"; $unificare = join(",",@gene,'TTT'); print 'Efectul functiei join folosind parametrul ","',"\n"; print " $unificare\n\n"; print "Array-ul are urmatoarele componente:\n @gene\n"; $unificare = join(":",@gene,'TTT'); print 'Efectul functiei join folosind parametrul ":"',"\n"; print " $unificare\n\n"; print "Alte functii utile pentru manipularea array-urilor\n"; @inverse = reverse(@gene); print "Efectul functiei reverse:\n"; print " @inverse\n"; @sortare = sort(@gene); print "Efectul functiei sort\n"; print " @sortare\n\n"; print 'ATENTIE la declararea unei variabile array cu undef !',"\n"; print 'se declara @variabila_array = undef',"\n"; @variabila_array = undef; print 'Se adauga doua componente oarecare la sfarsit cu ajutorul functiei push',"\n"; push(@variabila_array, 'SIRdeCARACTERE1' , 'SIRdeCARACTERE2'); $indexul_variabila_array = $#variabila_array; print "Dupa adaugare indexul variabilei declarate initial undef este: $indexul_variabila_array\n"; print "Deci variabila are ", scalar @variabila_array," componente desi au fost adaugate doar doua!\n"; foreach $i (0..$#variabila_array) { print "\tComponenta\t$i\t$variabila_array[$i]\n"; } print "\n"; # Efectul funcției rand aplicat la o variabilă array # returnează un index din array ales în mod aleatoriu. # Pe baza indexului ales aleatoriu se poate extrage ulterior # valoarea componentei existente la acel index. print "Efectul functiei rand aplicata pe o varibila array\n"; $index = rand(@gene); print "Indexul ales aleator este: $index \n"; $element = $gene[$index]; print "Componenta selectata este: $element \n";