Kažkada praeitą savaitę buvau pradėjęs versti
perlintro dokumentaciją, bet kol kas to nesu baigęs
daryti. Na, gal kam bus naudinga ir tai ką jau esu padaręs, tad štai
pirmoji įvado į perl dalis ;)
Kas yra Perl?
Perl yra bendros paskirties programavimo kalba, kuri pradžioje buvo
skirta teksto manipuliavimui, o dabar
yra naudojama daugeliui užduočių: sistemų administravimui, interneto
svetainių, tinklo, grafinių sąsajų
programavimui ir kitoms užduotims.
Ši kalba yra labiau praktiška (lengva naudoti, efektyvi, pilna) negu
graži (maža, elegantiška,
minimalistinė). Pagrindinės Perlo ypatybės yra naudojimo paprastumas,
tiek procedūrinio, tiek objektinio
programavimo palaikymas, patogus teksto apdorojimas ir vienas didžiausių
nemokamų modulių pasirinkimas.
Perlo programų paleidimas
Norint paleisti Perlo programą iš Unix komandinės eilutės tereikia
parašyti:
perl programosvardas.pl
Arba galima parašyti tokią pirmąją programos eilutę:
#!/usr/bin/env perl
… ir tada paleisti programą šitaip:
/kelias/iki/perl/programos.pl
Tiesa, ši programa turi turėti „vykdymo“ nuostatą, tad
reikia Unix parašyti
chmod 755 programa.pl
prieš ją paleidžiant.
Daugiau informacijos apie Perl interpretatorių galima rasti
perlrun dokumentacijoje.
Paprasčiausios sintaksės apžvalga
Perlo programa susideda iš vieno ar kelių sakinių. Šie sakiniai
paprastai būna surašyti byloje.
Priešingai nei kai kuriose kitose kalbose, nereikia aprašyti
main() funkcijos ar panašių
dalykų.
Perlo sakiniai baigiasi kabliataškiu:
print "Sveikas, pasauli";
Komentarai prasideda grotelėmis ir tęsiasi iki eilutės pabaigos:
# Čia yra komentaras
Tarpai, naujos eilutės (whitespace) nieko nereiškia:
print "Sveikas, pasauli" ;
…nebent jie yra simbolių eilutėse:
# atspausdins "sveikas pasauli" dviejose eilutėse print "Sveikas pasauli";
Simbolių eilutes galima aprašyti tiek viengubomis, tiek dvigubomis
kabutėmis:
print 'Sveikas, pasauli'; print "Sveikas, pasauli";
Tačiau tik dvigubose kabutėse esančios simbolių eilutės
„interpoliuoja“ kintamuosius ir
specialiuosius simbolius, tokius kaip naujos eilutės simbolis
(
):
print "Sveikas, $vardas\n"; # veikia kaip derėtų print 'Sveikas, $vardas\n'; # spausdins $vardas\n taip kaip parašyta
Skaičių nereikia imti į kabutes:
print 42;
Priklausomai nuo jūsų skonio, funkcijų argumentus galima rašyti
skliausteliuose, o galima juos ir
praleisti. Skliausteliai reikalingi tik retkarčiais norint paaiškinti
operacijų eiliškumą.
print("Sveikas, pasauli\n"); print "Sveikas, pasauli\n";
Daugiau informacijos apie Perl sintaksę galima rasti perlsyn
dokumentacijoje.
Perlo kintamųjų tipai
Perlas turi tris pagrindinius kintamųjų tipus: skaliarus,
paprastuosius masyvus bei asociatyviuosius
masyvus.
Skaliarai
Skaliarai saugo vieną reikšmę:
my $gyvunas = "kupranugaris"; my $atsakymas = 42;
Skaliarinės reikšmės gali būti simbolių eilutės, sveiki skaičiai arba
skaičiai su kableliu. Perlas
automatiškai pagal poreikį pavers vieną tipą į kitą. Nebūtina prieš
vartojant kintamuosius juos
deklaruoti.
Skaliarus galima naudoti įvairiai:
print $gyvunas; print "Gyvūnas yra $gyvunas\n"; print "$atsakymas pakėlus kvadratu gausime ", $atsakymas * $atsakymas, "\n";
Perle yra keletas labai neįskaitomai atrodančių „magiškų“
skaliarinių kintamųjų. Šie
specialūs kintamieji naudojami įvairiausiais tikslais ir visi yra
aprašyti perlvar dokumentacijoje.
Kol kas vienintelis toks specialus kintamasis, apie kurį vertėtų žinoti
yra $_, kuris reiškia
„kintamąjį pagal nutylėjimą“. Jis naudojamas daugelyje Perlo
funkcijų, jei joms neperduodami
kiti kintamieji, bei automatiškai nustatomas kai kuriuose cikluose.
print; # pagal nutylėjimą atspausdina tai kas saugoma $_
Paprastieji masyvai
Paprastuose masyvuose saugomas reikšmių sąrašas:
my @gyvunai = ("kupranugaris", "lama", "pelėda"); my @skaiciai = (23, 42, 69); my @maisyta = ("kupranugaris", 42, 1.23);
Masyvų indeksai prasideda nuo nulio. Štai kaip prieinama prie masyvo
elemento:
print $gyvunai[0]; # spausdina "kupranugaris" print $gyvunai[1]; # spausdina "lama"
Specialusis kintamasis $#masyvas paskutinio masyvo elemento
indekso numerį:
print $maisyta[$#maisyta]; # spausdina paskutinį elementą -- 1.23
galbūt jums norint sužinot kiek yra masyve elementų norisi naudoti
$#masyvas + 1, bet tai nėra
būtina, nes naudojant @masyvas ten kur Perlas tikisi skaliaro
(„skaliariniame
kontekste“) bus grąžinamas masyvo elementų skaičius:
if (@gyvunai < 5) { ... } # jei masyve @gyvunai mažiau nei 5 elementai...
Norint gauti keletą reikšmių iš masyvo:
@gyvunai[0,1]; # grąžina ("kupranugaris", "lama"); @gyvunai[0..2]; # grąžina ("kupranugaris", "lama", "pelėda"); @gyvunai[1..$#gyvunai]; # grąžina visus elementus, išskyrus pirmą
Tai vadinama „masyvo dalimi“ (array slice)
Su masyvais galima daryti įvairių naudingų dalykų:
my @surikiuoti = sort @gyvunai; my @atgaline_tvarka = reverse @skaiciai;
Perle yra ir keletas specialiųjų masyvų: @ARGV (programai
perduoti komandinės eilutės
argumentai), @_ (argumentai perduoti subrutinai). visi jie
aprašyti perlvar
dokumentacijoje.
Asociatyvieji masyvai
Asociatyvus masyvas aprašo vardo-reikšmės porų aibę:
my %vaisiu_spalvos = ("obuolys", "raudonas", "bananas", "geltonas");
Naudojant tarpus ir => operatorių galima perrašyti
įskaitomiau:
my %vaisiu_spalvos = ( obuolys => "raudonas", bananas => "geltonas", );
Pasiekti elementus galima taip:
$vaisiu_spalvos{"obuolys"}; # grąžina "raudonas"
Raktų bei reikšmių sąrašus galima gauti per funkcijas keys()
ir values()
my @vaisiai = keys %vaisiu_spalvos; my @spalvos = values %vaisiu_spalvos;
Asociatyvūs masyvai neturi kokios nors rikiavimo tvarkos, nors visada
galima surikiuoti masyvą, kuris
gaunamas su funkcija keys().
Lygiai kaip yra specialiųjų skaliarų ar paprastų masyvų, taip yra ir
specialių asociatyvių masyvų.
Labiausiai naudojamas yra %ENV specialusis asociatyvusis
masyvas, kuriame saugomi aplinkos
kintamieji. Apie tai plačiau perlvar dokumentacijoje.
Plačiau apie skaliarus, paprastus ir asociatyviuosius masyvus galima
pasiskaityti perldata
dokumentacijoje.
Sudėtingesnės duomenų struktūros gali būti sudaromos naudojantis
nuorodomis (references). Jų dėka
galima sukurti sąrašus ir masyvus kituose sąrašuose bei masyvuose.
Nuoroda yra skaliarinė reikšmė, galinti rodyti į bet kurio tipo Perlo
duomenis. Taigi, išsaugant nuorodą
į masyvą kaip kito masyvo elementą, galima sudaryti masyvų masyvus
(daugiamačius masyvus). Štai pavyzdys,
kuriame saugoma dviejų lygių asociatyvaus masyvo asociatyviame masyve
struktūra pasinaudojus anoniminėmis
nuorodomis:
my $kintamieji = { skaliarai => { apibudinimas => "viena reikšmė", simbolis => '$', }, masyvai => { apibudinimas => "reikšmių sąrašas", simbolis => '@', }, asociatyvus => { apibudinimas => "rakto/reikšmės poros", simbolis => '%', }, }; print "Skaliarai prasideda simboliu $kintamieji->{'skaliarai'}->{'simbolis'}\n";
Pilna dokumentacija apie nuorodas yra perlreftut,
perllol, perlref ir perldsc
dokumentacijose.