Cykl for w Perl

W języku programowania Perl istnieje kilka sposobów, aby utworzyć pętlę. Jednym ze sposobów jest użycie słowa kluczowego for.

Oto przykład:

▶ Run
#!/usr/bin/perl

for (my $i=0; $i < 3; $i++) {
    print "$i\n";
}

Program wypisze na ekran trzy linijki z cyframi:

0
1
2

Jak działa cykl for

Cykl for w języku programowania Perl bardzo przypomina cykl for w języku programowania C.

Po for w nawiasach idzie 3 fragmentu kodu:

  • wartość początkowa
  • sprawdzanie
  • zmiana

Najpierw odbywa się pierwszy fragment kodu. Potem następuje sprawdzenie na prawdę lub fałsz w drugim fragmencie kodu. Jeśli test zwraca prawdę, jest to wykonywane jest ciało pętli, jeśli test zwraca wartość fałsz, to pętla kończy się. Jeśli wykonywane jest ciało pętli, to po wykonaniu kodu w pętli wykonywana jest kod w trzecim segmencie, potem znowu sprawdzanie i wszystko idzie dalej już opisanego algorytmu.

Możliwe jest sytuacja ciało pętli nie zostanie wykonana ani razu. Tak się stanie jeśli pierwsza weryfikacja raz zwróci fałsz.

Brak wartości

Interesującą cechą cyklu polega na tym, że każdy fragment kodu w opisie cyklu może brakować.

Oto przykład pętli w opisie którego nie ustawia wartość początkową:

▶ Run
#!/usr/bin/perl

my $i = 0;

for (; $i < 3; $i++) {
    print "$i\n";
}

W przypadku, gdy w opisie cyklu for brak kontrola, to tworzy niekończący się cykl. Oto przykład cyklu for w którym nie znajduje się test, ale nadal ten cykl zakończył się sprawdzanie przeniesiona do ciała pętli i jest używany last.

▶ Run
#!/usr/bin/perl

for (my $i=0;; $i++) {
    last unless $i < 3;
    print "$i\n";
}

W opisie cyklu trzeci fragment tak samo może być:

▶ Run
#!/usr/bin/perl

for (my $i=0; $i < 3;) {
    print "$i\n";
    $i++;
}

Jeśli w cyklu opuścić wszystkie fragmenty, to tworzy nieskończoną pętlę:

#!/usr/bin/perl

for (;;) {
    print "infinity\n";
}

Widoczność zmiennej

W tym przypadku, jeśli zmienna została zdefiniowana w opisie cyklu, to na zewnątrz ciała pętli zmienna ta będzie niedostępna. W tym przypadku, jeśli w kodzie jest use strict;, to takie postępowanie generuje błąd.

▶ Run
#!/usr/bin/perl

use strict;
use warnings;

for (my $i=0; $i < 3; $i++) {
    print "$i\n";
}

print $i;
Global symbol "$i" requires explicit package name (did you forget to declare "my $i"?) at script.pl line 10.
Execution of script.pl aborted due to compilation errors.

Jeśli istnieje potrzeba użyć zmiennej licznik na zewnątrz ciała cykl, to trzeba określić jej na zewnątrz opis cyklu:

▶ Run
#!/usr/bin/perl

use strict;
use warnings;

my $i = 0;

for (; $i < 3; $i++) {
    print "$i\n";
}

print $i;

next i last

W Perlu są specjalne słowa kluczowe, za pomocą których można wpływać na wykonanie cyklu.

Słowo kluczowe next przerywa wykonanie bieżącej iteracji:

▶ Run
#!/usr/bin/perl

for (my $i=0; $i < 3; $i++) {
    next if $i == 0;
    print "$i\n";
}

A z pomocą last można w każdej chwili zakończyć wykonanie cyklu:

▶ Run
#!/usr/bin/perl

for (my $i=0; $i < 3; $i++) {
    last if $i == 1;
    print "$i\n";
}

Tematy pokrewne

Inne artykuły