Įvadas į Perl: pirma dalis: sintaksė ir kintamieji

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.

10 Comments

  1. na idomu idomu, kuo toliau tuo labiau niezti nagus lyst prie PERL'o ;] lauksim tolimesnes dalies…

  2. sudomino, jei ir kitas bus toks straipsnis, teks manau pasiskaityti apie perl'a ir galbut pradeti mokinits.

  3. Raktų bei reikšmių sąrašus galima gauti per funkcijas keys() ir values()

    my @vaisiai = keys %vaisiu_spalvos;

    my @spalvos = keys %vaisiu_spalvos;

    Turi but

    my @spalvos = values %vaisiu_spalvos;

    Beje, kodel cia array'ai jau % zymimi o ne @ ?

    bei

    $vaisiu_spalvos{"obuolys"}; # grąžina "raudonas"

    tikrai $ ? O @ negalima naudoti?

  4. arturaz:

    Oops, sumaišiau :)

    Turi būti my @spalvos = values %vaisiu_spalvos;

    % žymimi hešai (asociatyvūs masyvai)

    @ žymimi array (paprasti masyvai)

    $ žymimi skaliarai (scalars)

    $vaisiu_spalvos{'obuolys'} žymima su $, nes juk šito rezultatas yra skaliaras (grąžina stringą "raudonas")

  5. <quote>[b]$vaisiu_spalvos{'obuolys'}[/b] žymima su $, nes juk šito rezultatas yra skaliaras (grąžina stringą "raudonas")</quote>

    tai taip supratau, kad jeigu masyvo elementas yra masyvas tai vadinasi reiketų prieš jį rašyti '@' ženklą jeigu norime kintamajam priskirti 'motininio' masyvo elementą (kitą masyvą)

  6. Ne visai taip. Masyvo elementais gali būti tik skaliarai. Daugiamačiai masyvai sudaromi taip, kad masyvo nariai yra ne kiti masyvai, o nuorodos į kitus masyvus (nuorodos yra skaliarai). Tad jei turime dvimatį masyvą:

    my @foo = ( [1, 2], [3, 4] );

    ([1, 2] automatiškai sukuria nuorodą į masyvą — jei būtų ne nuoroda, o tiesiog masyvas, rašytume (1, 2))

    Iš nuorodos gauti patį masyvą labai lengva:

    my @foo1 = @{$foo[0]); # grąžins masyvą (1, 2)

    Šiaip jei paprastame masyve naudosi @ tai ir grąžins masyvą (na, masyvo dalį — array slice)

    my @foo = (0, 1, 2, 3);

    my @foo2 = @foo[2];

    # Dabar @foo2 yra masyvas su vieninteliu elementu '2'

  7. arturaz: na nesupratai tai dar kelis kartus perskaityk:) arba po eilute ar sakini, gi viskas paprasta ir aisku kaip 2×2:))))

    reiktu dekot moxliukuj uz propagavima ir neblestanti nora :))

  8. puiku. straipsnis tikrai sudomino. ypac sveikintina tai, kad jis lietuviskai. anksciau programavau tik php, bet dabar kilo noras dometis ir perlu.

Comments are closed.