use strict; use warnings; # Acest exemplu demonstrează implicațiile pe care la au instrucțiunile # next, redo, last, exit, die. # Exemplul trebuie utilizat cu un fișier GenBank de dimensiune mare, # ex. Homo_sapiens.GRCh38.109.chromosome.21.dat specificat ca parametru. # Pentru a putea scoate în evidență modul în care # operează funcțiile next, redo, last, exit, # trebuie activate preferențial exemplele corespunzătoare acestora. my $fisier = $ARGV[0]; # • next # Funcția next este folosită în interiorul unei iterații (bucle) în scopul # de a sări peste instrucțiunile care urmează după aceasta și pentru a începe următoarea # iterație fără a mai fi necesară execuția tuturor acestor instrucțiuni ulterioare. # După cum se observă și din exemplu, aceasta este combinată, de regulă, cu instrucțiunea if # pentru a specifica o condiție care să determine forțat să înceapă următoarea iterație. # În practică, next, este introdusă cel mai adesea în cadrul unei iterații de tip while sau for, # însă se poate extinde la orice alt tip de iterație (until, foreach). #=pod open('FISIER',"<",$fisier) or die "$fisier Nu poate fi deschis: $!"; while (my $line = ) { if ($line !~ /ORIGIN/) { next; } print "$line"; # aici mai pot fi foarte multe instrucțiuni } close FISIER; #=cut # • redo # Funcția redo este folosită în interiorul unei iterații (bucle) în scopul # de a executa din nou iterația din poziția respectivă fără a se mai reevalua condiția iterației! # Aceasta este combinată de regulă cu un if care să specifice o condiție care # să impună repornirea iterației fără ca condiția iterației să fie reevaluată. # Instrucțiunile care urmează după redo nu se mai execută. # În exemplul dat apelarea redo va executa din nou iterația curentă fără # să mai verifice condiția ($line = ) aceasta rămânând mereu aceeași și, # din această cauză, tot ceea ce urmează după redo nu se mai execută. #=pod open('FISIER',"<",$fisier) or die "$fisier Nu poate fi deschis: $!"; while (my $line = ) { print "$line"; if ($line !~ /ORIGIN/) { redo; } print "Aceasta instructiune nu se mai poate executa\n"; } close FISIER; #=cut # • last # Funcția last oprește forțat o iterație în punctul respectiv. # Controlul este cedat fie programului principal, fie unei iterației de nivel superior. # Funcția last poate fi utilizată numai în interiorul unei iterații. #=pod open('FISIER',"<",$fisier) or die "$fisier Nu poate fi deschis: $!"; while (my $line = ) { if ($line =~ /ORIGIN/) { last; } print "$line"; } close FISIER; #=cut # • exit # Funcția exit oprește forțat/necondiționat întreg programul oriunde ar fi apelată. # Indiferent de situația în care este apelată (iterație sau decizie, subrutină sau modul) # oprește necondiționat întreg programul. #=pod open('FISIER',"<",$fisier) or die; exit; while (my $line = ) { if ($line !~ /ORIGIN/) { next; } print "$line"; } close FISIER; #=cut # • die # Asemănător (dar nu identic) cu exit. Poate să întoarcă un răspuns pentru utilizator, # însoțit de un cod de eroare care poate fi afișat prin intermediul variabilei $! . # Pentru a pune în evidență efectul lui die, programul trebuie pornit fără parametri. #=pod open ('FISIER',"<",$fisier) or die "$fisier are o problemă! Programul trebuie oprit!\n $!"; while (my $line = ) { if ($line !~ /ORIGIN/) { next; } print "$line"; } close FISIER; #=cut