Į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.