use strict; my $sir; my $sir1; my $sir2; my $sirnou; my @sirnou; my $lungime; my $cod; my $caracter; my $rezultat; my $secv; my $imax; my $alegere; my $intreg; my $pozitie; $sir = 'accgcggttcgtactgaggaa'; $lungime = length($sir); $cod = ord('a'); #Returnează codul ASCII al caracterului indicat. # Funcția ord poate fi folosită și direct pe un șir de caractere. # În această situație returnează codul ASCII doar a primului caracter din șir. # Dacă se dorește transformarea întregului șir în valori numerice bazate pe ASCII, # atunci va trebui parcurs șirul caracter cu caracter, vezi funcțiile de mai jos. $caracter = chr($cod); #Returnează caracterul corespunzător codului ASCII. print "Sirul initial este: $sir\n"; print "Lungima sirului este de $lungime de caractere\n"; print "Codul ASCII corespunzator caracterului 'a' este: $cod\n"; print "Caracterul corespunzator codului ASCII $cod este: $caracter\n\n"; $sirnou = substr($sir,3,4); # copierea unei porțiuni din cadrul șirului print "Exemplul urmator demonstreaza comportamentul functiei substr\n"; print "Functia este definita cu 4 parametri: substr(STRING,START,LENGTH,REPLACEMENT)\n"; print "Ultimul parametru este optional\n\n"; print "Sirul initial este: $sir\n"; print 'Este invocata functia substr($sir,3,4)',"\n"; print "Secventa copiata este: $sirnou\n\n"; print "Sirul initial este: $sir\n"; print "Este invocata functia substr(",'$sir,',"3,4,'aaaaa')\n"; print "Se substituie secventa aaaaa\n"; substr ($sir,3,4,'aaaaa'); # înlocuirea/substituția unei porțiuni din șir cu secvența indicată print "Secventa modifica este: $sir\n\n"; print "Daca ultimul parametru este sirul vid '' atunci\n"; print "caracterele pe care se fixeaza functia vor fi eliminate\n"; print "Este invocata functia substr(",'$sir,',"3,4,'')\n"; substr ($sir,3,4,''); # echivalent cu operația de eliminare/deleție print "Secventa modifica este: $sir\n\n"; print "Functia substr poate fi folosita si in scopul adaugarii unei secvente noi\n"; print "Se adauga secventa ggggg la pozitia 2\n"; print 'Este invocata functia substr($sir,2,0) = ',"'ggggg'\n"; substr ($sir,2,0) = 'ggggg'; # adaugarea/inserția unei noi secvențe la o poziție indicată print "Secventa modifica este: $sir\n"; print "Daca valoarea 0 este modificata atunci un numar de caractere fi eliminat\n"; print "in locul lor fiind introdusa secventa indicata\n\n"; print "Transformarea tuturor caracterelor in majuscule\n"; $sirnou = uc($sir); print "Efectul functiei uc: $sirnou\n"; print "Transformarea tuturor caracterelor in minuscule\n"; $sirnou = lc($sir); print "Efectul functiei lc: $sirnou\n\n"; print "Functia index este utila pentru a identifica\n"; print "pozitia la care se afla o secventa indicata drept parametru\n"; $secv = 'tcgt'; $rezultat = index($sir,$secv); print "Sirul analizat este: $sir\n"; print "Secventa $secv a fost gasita la locatia: $rezultat\n"; print "Daca secventa nu este identificata atunci functia returneaza -1\n\n"; print "Functia index poate fi exploatata si in scopul\n"; print "cautarii unei secvente incepand cu o anumita pozitie specificata\n"; $sir1 = 'agtctgaccatgatcgatgaacatgtcag'; print "In sirul: $sir1\n"; $secv = 'gtc'; $pozitie = 7; print "Secventa $secv este cautata incepand cu pozitia $pozitie\n"; $rezultat = index($sir1,$secv,$pozitie); #print "Rezultatul fucției index:\n"; #print "In sirul: $sir\n"; print "Incepand analiza de la pozitia $pozitie a fost gasit $secv la pozitia $rezultat\n"; print "Daca secventa nu este identificata atunci functia returneaza -1\n"; print "Functia index nu returneaza decat o singura valoare chiar daca variabila rezultat\n"; print "este de tip array si ar permite acceptarea mai multor valori simultan ca in cazul split\n\n"; print "Functia rindex este utila pentru a identifica\n"; print "locatia ultimei aparitii a unei secvente intr-un sir\n"; $sir1 = 'agtctgaccatgatcgatgaacattcag'; $secv = 'tga'; print "Sirul analizat este: $sir1\n"; $rezultat = rindex($sir1,$secv); print "Ultima aparitie a secventei $secv a fost identificata la locatia $rezultat\n"; print "Daca secventa nu este identificata atunci functia returneaza -1\n\n"; print "Functia split scindeaza un sir in mai multe siruri\n"; print "pe baza specificarii unei secvente folosite drept delimitator\n"; $sir2 = 'taccgaccgtaccttggacccctgt'; @sirnou = split('acc',$sir2); # # După cum se observă split() este o funcție pentru șiruri de caractere # care este folosită pentru a împărți/scinda un șir în mai multe secțiuni. # În acest scop funcția oferă diferite modalități de a împărți un șir, cum ar fi: # - pe baza unui singur caracter sau șir de caractere fix (vezi exemplul dat), # - pe baza unei expresii regulate (REGEX), # - pe baza unui grup de caractere, în câte secțiuni să împărți șirul. # - pe baza unei valori nedefinite. # Această funcție permite și posibilitatea de a specifica în câte secțiuni trebuie împărțit șirul. # # Funcția acceptă următoarele sintaxe: # split /Pattern/, Expression, Limit # split /Pattern/, Expression # split /Pattern/ # Split # # Pattern: specifică o expresie regulată care oferă criteriile după care va fi împărțit șirul. # Expression: reprezintă șirul care urmează a fi împărțit. # Limit: este opțională și reprezintă o restricție care oprește procesul de împărțire # la a (n-1)a identificare a Pattern-ului în cadrul șirului. # # Pentru a prelua rezultatul funcției split() se utilizată o variabilă array. # Această variabilă se poate popula cu un număr variabil de componente # în funcție de numărul de sub-șiruri obținute după operația de scindare. # Dacă variabila este scalară, atunci se returnează doar o valoare numerică, # aceasta reprezentând numărul de șiruri obținute după operația de scindare. # print "Sirul supus operatiei de split-are este: $sir2\n"; print "Delimitatorul este secventa acc\n"; print "Rezultatul split-arii este: @sirnou\n"; $imax = $#sirnou + 1; print "In acest caz variabila array a primit $imax componente\n\n"; print "CAZURI SPECIALE in care functia substr are parametri negativi\n"; print "Cazul in care parametrul START este negativ\n"; print "Sirul analizat este: $sir1\n"; print "Este invocata functia substr(",'$sir1,',"-5,3,'nnnn')\n"; substr($sir1,-5,3,'nnnn'); print "Rezultatul este $sir1\n"; print "Dupa cum se observa, locatia este identificata\n"; print "numarand 5 pozitii de la dreapta la stanga.\n\n"; print "Cazul in care parametrul LENGTH este negativ\n"; $sir1 = 'agtctgaccatgatcgatgaacattcag'; print "Sirul analizat este: $sir1\n"; print "Este invocata functia substr(",'$sir1,',"5,-4,'nnnnnnnn')\n"; substr($sir1,5,-4,'nnnnnnnn'); print "Rezultatul este $sir1\n"; print "Dupa cum se observa, toate caracterele care se gasesc intre\n"; print "caracterul identificat la indexul 5 si ultimele 4 (-4) caractere\n"; print "se inlocuiesc cu nnnnnnnn\n"; print "Altfel spus, intre primele 5 caractere si ultimile 4 caractere\n"; print "actioneaza substitutia functiei substr\n"; print "In acest caz START si LENGTH se comporta ca terminatori\n\n"; print "Functia rand poate fi utilizata pentru a extrage\n"; print "in mod aleatoriu un caracter dintr-un sir\n"; $sir = 'ACGTTTATGGT'; $lungime = length($sir); print "Sirul supus analizei este: $sir\n"; print "Lungimea sirului este de $lungime caractere\n"; $alegere = rand($lungime); print "Aleator a fost extrasa valoarea: $alegere\n"; $intreg = int($alegere); print "Se pastreaza doar a partea intreaga: $intreg\n"; $caracter = substr($sir,$intreg,1); print "Pe baza acestei valori a fost extras caracterul $caracter\n";