Dar vieno analitiko svetainė

Petras Kudaras

Įvadas į Perl: antroji dalis: kintamųjų sritys, ciklai ir sąlygos

Kintamųjų sritys**

Kol kas visada kintamuosius aprašėme naudodami šią sintaksę:

my $kintamasis = "reikšmė";

Tiesą sakant, my nėra būtinas, galima tiesiog rašyti:

$kintamasis = "reikšmė";

Tačiau jei praleidžiate my, sukuriamas globalusis kintamasis visoje jūsų programoje, o tai nėra pats geriausias programavimo būdas. my sukuria leksinės srities (lexically scoped) kintamąjį, kuris galioja tik tame bloke, kuriame jis yra aprašytas (bloką sudaro keletas sakinių, apskliaustų figūriniais skliaustais).

my $a = "foo";
if ($kazkas) {
    my $b = "bar";
    print $a; # spausdina "foo"
    print $b; # spausdina "bar"
}
print $a; # spausdina "foo"
print $b; # nieko nespausdina, nes $b galiojimo blokas jau baigėsi

Jeigu naudosite my kartu su use strict; jūsų programos pradžioje, Perlo interpretatorius galės pastebėti dažnas programuotojų klaidas ir apie tai jus įspėti. Tarkim aukščiau duotame pavyzdyje paskutinis print $b; išmestų klaidą ir programa neveiktų. Rekomenduojama visada naudoti strict sintaksę.

Sąlygos ir ciklų sakiniai

Perlas turi visus standartinius ciklos ir sąlygos sakinius išskyrus switch/case (bet jei jums tikrai jų reikia, galite pasinaudoti moduliu Switch, kuris netgi gali daugiau nei įprasti switch/case sakiniai kitose kalbose). Sąlyga gali būti bet kuris Perlo sakinys. Kitame skyriuje bus aprašomi operatoriai, tad žiūrėkite ten, kokie sąlygos, Būlio logikos operatoriai dažnai naudojami sąlygos sakiniuose.

if

if ( sąlyga ) {
    ...
} elsif ( kita sąlyga ) {
    ...
} else {
    ...
}

Yra ir atvirkštinė versija:

unless ( sąlyga ) {
    ...
}

… kuri reiškia tą patį kaip ir if (!sąlyga) { ... }, tik unless lengviau perskaityt. Perlo sąlygos sakiniuose figūriniai skliaustai yra būtini, net jei yra tik vienas sakinys sąlygos bloke. Tačiau galima be to apsieiti ir iškelti sąlygą į sakinio galą:

# tradicinis būdas
if ( $kazkas ) {
    print "aha!";
}
# labiau perliškas būdas:
print "aha!" if $kazkas;
print "nebėra bananų" unless $bananai;

while

while ( sąlyga ) {
    ...
}

Kaip ir su unless, yra ir atvirkštinė versija:

until ( sąlyga ) { # tas pats kaip while (!sąlyga)
    ...
}

while galima permesti ir į galą:

print "la la la\n" while 1; # amžinas ciklas

for

Lygiai taip kaip ir C:

for ($i = 0; $i <= $max; $i++) {
    ...
}

C stiliaus for ciklas retai naudojamas Perle, nes Perl turi draugiškesnį ir lengviau panaudojamą foreach ciklą.

foreach

foreach (@masyvas) {
    print "Masyvo elementas $_\n";
}
# nebūtina naudot $_...
foreach my $raktas (keys %hash) {
    print "Rakto $raktas reikšmė yra $hash{$raktas}\n";
}

Daugiau apie ciklo sąkinius (ir dar apie tuos kurie čia nepaminėti) galima rasti perlsyn dokumentacijoje.