# Aceste exemple demonstrează modul de manipulare a variabilelor %hash # Pentru început se inițializează o variabilă de tip hash numită %secvente %secvente = (CAPZA2 => 'ATGCCTCCTCAGCTGCAAAACGGCCTGAACCTCTCGGCCAAAGTTGTCCAGGGAAGCCTG', TFEC => 'GAGGAAGAGGGCATCCTCAGGCGGCTGAAGAAGTATGACAACTGCTGGTTGGCTCTCACTCAACTG', CFTR => 'CTCGGGAAGAAGTGCTTTGCTCTCAGGATGGCCAGCCGGCTGGCCAAGGAGGAAGGGTGGAGCCGGCT', LOC51691 => 'CCCGGGTGGAAGGTTGAGTGCATGACATTGCCTGGATGAAGTTTGACGCACAA', LOC56311 => 'TTCAACCGGATCGATGGAAAAGCCAGCACCAAGCTCACGCCCATAGGCTACATCCCCAAG', PCK1 => 'AATGCCGACCTCCCCTGTGAAATCGAGAGAGAGATCCTTGCCTTGAAGCAAAGAATAAGCAAATCGAAAATCGA'); print "Gena CAPZA2 are secventa:\n$secvente{CAPZA2}\n\n"; @gene = keys %secvente; $dimensiune = keys %secvente; print " Numele genelor identificate: @gene\n"; print " Exista $dimensiune gene a caror secventa este cunoscuta\n\n"; print " Adăugarea de componente la o variabilă hash\n"; print " EX: Se adauga cheia ING3 cu secventa asociata:\n"; print " GTGAAATCGAGAGACACCCCAACTCGAGGTTCTGCACCCCTGCCAGCCAGTGCCCCATCATTGATGCTGCCTGG\n"; $secvente{'ING3'} = 'GTGAAATCGAGAGACACCCCAACTCGAGGTTCTGCACCCCTGCCAGCCAGTGCCCCATCATTGATGCTGCCTGG'; @gene = keys %secvente; $dimensiune = keys %secvente; print ' Afisarea directa a continutului varibilei %secvente nu este de mara ajutor!',"\n"; print %secvente,"\n\n"; print " Dupa adaugarea ING3 genele cunoscute sunt: @gene\n"; print " Exista $dimensiune gene cu secventele lor corespunzatoare \n"; print " Eliminarea unui element din varibila hash\n"; print " EX: Se elimina LOC51691\n"; delete $secvente{'LOC51691'}; @gene = keys %secvente; $dimensiune = keys %secvente; print " Dupa eliminarea LOC51691 au ramas: @gene\n"; print " Sunt $dimensiune gene cu secventele lor corespunzatoare\n\n"; # Aplicarea funcției undef pastrează codul genei dar elimină secvența asociată undef($secvente{'CFTR'}); # $secvente{'CFTR'} = undef; similară cu expresia anterioară # Parcurgerea și/sau extragerea cheilor dintr-o variabilă hash folosind foreach print " Parcurgerea si/sau extragerea datelor:\n"; foreach (sort keys %secvente) { print " $_ => $secvente{$_}\n"; } # Hash-urile si Array-urile sunt inter-compatibile la atribuire. # Cele două tipuri de variabile pot interschimba date. # În cazul în care datele unui hash sunt atribuite unui array, # acesta din urmă se initializează cu toate componentele pe care le are hash-ul, # singura problemă constă în faptul că în array se pierde asocierea. # Invers, dacă un hash primește datele unui array, atunci se vor crea în mod automat # perechi, două câte două. Indecșii pari vor deveni chei iar, # indecșii impari vor deveni valorile asocite cheilor. @secvente = %secvente; print "\n Variabila array detine componentele hash-ului:\n@secvente\n"; print " Daca nu se intervine in array, hash-ul se poate recompune.\n"; %secvente_regrupate = @secvente; print " Noua variabila este identica cu cea initiala:\n\n" if (%secvente == %secvente_regrupate); foreach (sort keys %secvente_regrupate) { print " $_ => $secvente_regrupate{$_}\n"; } # Manipularea datelor stocate într-o variabilă hash $secvente{'SDHA'} = 'AACTCGAGGTTCTGCACCCCGTGAAATCGAGAGACACCGATGCTGCCTGGCCTGCCAGCCAGTGCCCCATCATTAA'; print "\n"; foreach (sort keys %secvente) { print " $_ => $secvente{$_}\n"; } # Invocarea cheilor dintr-un hash prin intermediul @ într-o variabilă array @alegere = @secvente{CAPZA2, TFEC, PCK1}; print "\n"; print " Secventele genelor selectionate sunt:\n@alegere\n\n"; # Apelarea secvențelor prin intermediul @ este avantajoasă doar dacă # trebuie extrase mai multe informații simultan (listă). # Într-adevar $secvente{CAPZA2} produce același rezultat cu @secvente{CAPZA2} # Accesarea tuturor componentelor unui hash utilizând foreach. # Funcția sort ordonează alfabetic componentele, prezența ei fiind opțională. # În acest exemplu variabila $simbol se substituie variabilei $_ foreach $simbol (sort keys %secvente) { print " Gena $simbol are secventa: $secvente{$simbol}\n"; } print "\n"; # Varianta alternativă folosind while{} și each() while (($simbol, $secventa) = each%secvente) { print " Gena $simbol are secventa: $secventa\n"; } # Exemple de instrucțiuni ce implică manipularea datelor stocate în hash-uri # @gene_names = sort(keys(%sequences)); # ($key, $value) = each(%sequences); # https://perldoc.perl.org/5.28.2/functions/each # Golirea (reset-area) unei variabile %hash %secvente = (); print %secvente;