Dar vieno analitiko svetainė

Petras Kudaras

Įvadas į Perl: baigiamoji dalis: įpraiškos ir kita

Įpraiškos

Perlas palaiko sudėtingą ir plačią įpraiškų sintaksę. Pilną jos aprašymą galima rasti perlrequick, perlretut ir kituose dokumentacijos skyriuose. Tačiau trumpai:

Paprastas tikrinimas

if (/foo/)      { ... } # 'true' jei $_ yra simbolių seka 'foo'
if($a =~ /foo/) { ... } # 'true' jei $a yra simbolių seka 'foo'

Įpraiškų operatorius // aprašytas perlop dokumentacijoje. Jis pagal nutylėjimą įprašką taiko kintamajam $_, tačiau tai galima pakeisti, pasinaudojus operatoriumi =~ (kurio aprašymą irgi galima rasti perlop dokumentacijoje).

Paprastas pakeitimas

s/foo/bar/;           # pakeičia 'foo' į 'bar' kintamajame $_
$a =~ s/foo/bar/;     # pakeičia 'foo' į 'bar' kintamajame $a
$a =~ s/foo/bar/g;    # pakeičia VISUS 'foo' į 'bar' kintamajame $a

Pakeitimo operatorius s/// aprašytas perlop dokumentacijoje.

Sudėtingesnės įpraiškos

Įpraiškos nebūtinai sudaromos iš pastovių simbolių eilučių. Tiesą sakant, naudojantis sudėtingesnėmis įpraiškomis galite aprašyti tokius šablonus, kokius tik sugalvosite. Pilnai tai aprašyta perlre dokumentacijoje, o čia pateikiama tik trumpa lentelė:

.               vienas bet koks simbolis
\s              tarpai, naujos eilutės ir tabuliacijos simboliai (<i>whitespace</i>)
\S              ne tarpai, ne neujos eilutės ir ne tabuliacija (<i>non-whitespace</i>)
\d              skaitmuo (0-9)
\D              ne skaitmuo
\w              žodžių simbolis (a-z, A-Z, 0-9 ir _)
\W              ne žodžių simbolis
[aeiou]         atitinka vieną simbolį iš duotos aibės
[^aeiou]        atitinka vieną simbolį ne iš duotosios aibės
(foo|bar|baz)   atitinka vieną iš alternatyvų
^               eilutės pradžia
$               eilutės pabaiga

Taip pat galima nurodyti kiek kartų įpraiška turi atitikti prieš tai nurodytą išraišką, kur „išraiška“ yra paprastas simbolis arba vienas iš metasimbolių nurodytų prieš šią pastraipą esančioje lentelėje.

*       nulį ar daugiau kartų
+       vieną ar daugiau kartų
?       nulį arba vieną kartą
{3}     lygiai tris kartus
{3,6}   nuo trijų iki šešių kartų
{3,}    tris ar daugiau kartų

Keletas trumpų pavyzdžių:

/^\d+/         eilutė prasidedanti vienu ar daugiau skaitmenų
/^$/            tuščia eilutė (po eilutės pradžios iš karto eina eilutės pabaiga)
/(\d\s){3}/    trys skaitmenys atskirti tarpais ar tabuliacija (tarkim "3 4 5 ")
/(a.)+/         eilutė, kurioje kiekviena neporinė raidė yra 'a' (pvz 'abacadaf')
# Šis ciklas skaito iš STDIN ir spausdina netuščias eilutes:
while (<>) {
    next if /^$/;
    print;
}

Skliausteliai

Skliausteliai naudojami ne vien tik grupavimui – jie turi ir kitą paskirtį. Jie gali būti naudojami įpraiškos rezultatų išsaugojimui. Rezultatai atsiduria kintamuosiuose $1, $2 ir taip toliau.

# pigus ir ne visai tikslus būdas išskaidyti el.pašto adresą į dalis:
if ($email =~ /([^@])+@(.+)/) {
    print "Vartotojo vardas: $1\n";
    print "Domenas: $2\n";
}

Kitos įpraiškų galimybės

Perlo įpraiškos dar palaiko daugybę dalykų (backreferences, lookaheads ir t.t.) Apie visą tai galima pasiskaityti perlrequick, perlretut ir perlre dokumentacijose.

Subrutinų rašymas

Labai lengva rašytis savo subrutinas:

sub log {
    my $pranesimas = shift;
    print LOGBYLA $pranesimas;
}

Ką veikia tas shift? Na, subrutinai perduodami argumentai atsiranda masyve @_ (apie tai daugiau perlvar dokumentacijoje). Jeigu shift neperduodami jokie argumentai, ši funkcija naudoja masyvą @_. Tad my $pranesimas = shift; paima pirmą argumentų masyvo narį ir priskiria jį kintamajam $pranesimas. Su @_ galima elgtis ir kitaip:

my ($pranesimas, $svarbumas) = @_; # dažnas būdas
my $pranesimas = $_[0];            # retas ir bjaurus būdas

Subrutinos gali ir grąžinti reikšmes:

sub kvadratas {
    my $skaicius = shift;
    my $rezultatas = $skaicius * $skaicius;
    return $rezultatas;
}

Daugiau apie subrutinas perlsub dokumentacijoje

Objektinis Perlas

Objektinis Perlas yra ganėtinai paprastas. Objektai perle yra nuorodos, kurios magiškai žino kokį objektą jos vaizduoja. Tačiau objektinis perlas neįeina į šį trumpą įvadą. Skaitykite perlboot, perltoot, perltooc ir perlobj dokumentaciją.

Pradedantieji Perlo programuotojai dažniausiai su objektiniu programavimu susiduria tik naudodamiesi Perlo moduliais.

Naudojimasis Perlo moduliais

Perlo moduliai leidžia jums neišradinėti dviračio, nes galima naudoti skodu, kuris jau kažkieno parašytas. Modulius galima parsisiųsti iš http://www.cpan.org. Nemažai modulių yra įdiegiami kartu su pačiu Perlu. Moduliai CPAN svetainėje yra kategorizuoti. Yra daug įvairiausių kategorijų: nuo tekso apdorojimo iki tinklo protokolų, nuo duomenų bazių iki grafikos. Norint sužinoti kaip naudotis kuriuo nors moduliu, komandinėje eilutėje parašykite perldoc Modulio::Pavadinimas. Kode dažniausiai jums reikės rašyti use Modulio::Pavadinimas – tai įkraus moulį ir leis naudotis jo funkcijomis.

perlfaq dokumentacijoje yra dažnai užduodami klausimai ir atsakymai apie dažnai pasitaikančias užduotis. Dažnai atsakymai siūlo naudotis vienu ar kitu moduliu. perlmod dokumentacija bendrai aprašo Perlo modulius, perlmodlib dokumentacijoje yra sąrašas modulių, kurie įdiegti kartu su Perlu. Jeigu patys norite rašytis Perlo modulius, skaitykite perlnewmod dokumentaciją.