Rikiavimas Perlo programavimo kalboje

Prieš savaitę Džibas aprašė rikiavomus Python kalba, tad sumaniau jog nereikia atsilikti, ir bandysiu pateikti analogiškus Perl rikiavimo būdus ;)

Paprasčiausiai rikiuoti masyvo elementus didėjimo tvarka užtenka iškviesti funkciją sort:

@a = (0,3,5,3,1,2,4,6,2,4,5,7,3);
my @a = sort @a;
print "$_ " for @a;

Spausdina:

0 1 2 2 3 3 3 4 4 5 5 6 7

Kaip ir Pitone, galima pasirašyti savo rikiavimo funkciją:

my @a = (0,3,5,3,1,2,4,6,2,4,5,7,3);
@a = sort { $a - $b } @a;
print "$_ " for @a;

Spausdins tą patį kaip ir prieš tai.

Toliau Džibas parodė kaip rikiuoti hešų hešus (hmm… ten šiaip gi logiškai turėtų būti hešų masyvas…). Taigi toks pat pavyzdys su Perlu (tik su hešų masyvu):

my @a = ( { 'item' => 6, 'zodis' => 'ka' },
          { 'item' => 2, 'zodis' => 'kva'},
          { 'item' => 5, 'zodis' => 'kre'} );
@a = sort { $a->{'item'} <=> $b->{'item'} } @a;
print "item: $_->{'item'} zodis: $_->{'zodis'} \n" for @a;

Spausdina:

item: 2 zodis: kva
item: 5 zodis: kre
item: 6 zodis: ka

O va taip rikiuojami objektai:

package Objektas;
sub naujas {
	my ($self, $skaicius) = @_;
	bless {'skaicius' => $skaicius}, $self;
}
sub kasastoks {
	my $self = shift;
	print "Esu objektukas nr. $self->{'skaicius'}\n";
}
package main;
my @objMasyvas = (Objektas->naujas(3),
		  Objektas->naujas(2),
 		  Objektas->naujas(19),
		  Objektas->naujas(1));
@objMasyvas = sort { $a->{'skaicius'} 
                          <=> 
                     $b->{'skaicius'} } @objMasyvas;
$_->kasastoks() for @objMasyvas;

Tai spausdina:

Esu objektukas nr. 1
Esu objektukas nr. 2
Esu objektukas nr. 3
Esu objektukas nr. 19

O pasižaidimui, šiek tiek sutrumpintas kodas, darantis visiškai tą patį :)

package Objektas;
sub naujas    { bless {'skaicius' => $_[1]}, $_[0]; }
sub kasastoks {	print "Esu objektukas nr. $_[0]->{'skaicius'}\n"; }
package main;
my @objMasyvas = map { Objektas->naujas($_) } (3,2,19,1);
@objMasyvas = sort { $a->{'skaicius'} <=> $b->{'skaicius'} } @objMasyvas;
$_->kasastoks() for @objMasyvas;

Standartai dienoraščiuose

Pasižiūrėjau kad puikusis naujasis Džibo projektukas „lietuviški dienoraščiai“ kažkaip keistai bendrauja su mano įrašų datomis
(laikas rodomas penkiomis valandomis vėlesnis – dėl to mano įrašai puikuojasi visą laiką kaip patys naujausi ;)

Esmė tame, kad visuose dienoraščiuose naudojamos dvi datų versijos – Dublin Core datos formatas (einantis
<dc:date> lauke ISO 8601 formatu) ir standartinė Netscape (tais gūdžiais laikais kai buvo formuojami pirmi RDF
standartai) įvesta RFC822 data (lauke <pubDate>). Aišku prie viso to prisideda dar tie visi džiaugsmai vadinami laiko
zonomis. Plačiau apie laikų istoriją ir panašiai galima pasiskaityti pas Dive into Mark.

Peržiūrėjau RSS esančius Džibo lietuviškų dienoraščių sąraše ir radau, kad dauguma naudoja ISO 8201 datą (su Dublin Core). LiveJournalininkai savaime suprantama naudoja GMT laiką, bet čia Džibo svetainė manau turėtų tą laiką paversti į EET. Labai keistai datą perdavinėja visi iš *.php.lt (kaip UNIX timestampą – ar tai atitinka standartus?) Kai kurie neperduoda iš vis laiko zonos, bet tai leidžiama pagal standartus.

Beje, besidepukomuko ir araki vis dar nustato Content-type į text/html, kas labai negražiai atrodo Mozilloj ;) Juk turėtų būti text/xml

Svetainės pokyčiai

Šiandieną kaip ir žadėjau sutvarkiau tą įžymųjį riktą, kai buvo
įmanoma rašyti komentarus neegzistuojančioms temoms. Tiesa, padariau
taip, kad kiekvienas komentaras, kuris neturi savo temos automatiškai
einą į 666 dienoraščio įrašą – kiekviena kompiuterastinė svetainė
turi savo keistų įdomybių, tad palieku šitą taip kaip yra (nesinori
vienok trint visos tos 666-osios temos ;)

Padariau dar vieną kosmetinį pataisymą – dabar veikia XHTML 1.0
standartas komentarų formoje (Trūko kai kurių uždarančiųjų žymių). Taip
pat dabar veikia ir <code> žymė komentaruose
(bbkodas). Galbūt kada nors bus įmanoma ir su sintaksės žymėjimu
sužaist, bet norėtųsi palaikyt daugiau nei vieną programavimo kalbą ;)

Grįžau

Na štai, po kelių dienų bastymosi po Lietuvą, vėl sėdžiu Vilniuje prie savo
kompiuterio. Kaip sakant „visur gerai, bet localhoste geriausia“.

Na, visų ten įvykių kur ėjau, ką mačiau ir kur buvau nepasakosiu, nes tai
niekam neįdomu. Jei trumpai, tai niekas nepasikeitė – nei susiradau
merginą, nei ruošiuosi palikti kompiuterius ir išsikraustyti pas aborigenus.
Tiesa, šiek tiek išskirtinė buvo paskutinė naktis Palangoje, galbūt verta
šiokio tokio jūsų kompiuterastinio dėmesio.

Grįžau į Palangą tik kokią 21 valandą (prieš tai buvau Nidoje, bet kelionės
metu nieko kompiuterastiško neįvyko). Buvau ten kažką preliminariai sutaręs su
corn_kid jog eisim alaus apie vidurnaktį kur nors Kupetoj ar Bare.
Jaučiausi žvėriškai išalkęs tad iš karto patraukiau į Kupetą, užsisakiau
kažikokį vištienos kepsnį ir tikėdamasis geros kompiuterastinių pokalbių su
alaus bokalais nakties pradėjau jį naikinti. Va čia prasidėjo visos bėdos.
corn_kid parašė kad jam šalta ir lyja, todėl kompiuterastinio išgėrimo
nebus, nes jis liks su mergina. Huh? Atsisakyti alaus ir pasvarstymų temomis
„Perl yra gerai, užtad PHP tik kartais“ ir „mano serveris
gali apdėti tavo serverį net ir be SCSI diskų“ dėl merginos? kažkas čia
man nepažįstamo. Na tiek to. Baigiasi kepsnys, baigiasi muzika, prasideda
tiesioginė Baro transliacija. Apsimesdamas paprastu PHP programuotoju įeinu į
Barą. Nyku gi ten. Visi ploja pagal režisieriaus nurodymus, o aš tų barmenų
nepažįstu ir šiaip abejoju ar jiems galima įrodyt jog Perlas yra gera
programavimo kalba, tad greit iš ten pasišalinu. Lauke lyja, bet aš su
lietsargiu (kas labai pravers už kokių trejų valandų), tad pėdinu per balas
Basanavičiaus gatvės link. Net jei neisiu kur nors į kokį klubą, vis tiek
žinau kad Basanavičiaus gatvėje yra interneto kavinė su lipniomis
klaviatūromis, kuriose neveikia CTRL mygtukai. O interneto kavinė yra gerai,
nes galima pasitikrinti ar neatsirado ko nors naujo ir intriguojančio
perlmonksuose ar dar kur nors.

Bet patekau ne į interneto kavinę. Užėjau į Laukinių Vakarų Salūną (LVS).
Po Kupetoje buvusios puikios bliuzo ir rokenrolo programos čia muzika buvo
visiškai skirta eiliniam klubiniam Lietuvos piliečiui iš kokių nors Gargždų
(aš nieko prieš Gargždus neturiu, čia tik atsitiktnis kaimo.. mmmm…
miestelio pavadinimas). Sėdėjau ramiai ir stebėjau kas vyksta. Kas vyko ant
scenos ar šokių aikštelėje iš pradžių nebuvo įdomu, tad stebėjau publiką. Ok,
iki šiol galvojau, kad Brodvėjus yra blogai. Brodvėjus yra labai gerai. LVS
publiką sudarė visokios ten
„aš-iš-Kelmės-ir-švenčiu-savo-16-ąjį-gimtadienį“ bei
„aš-iš-Eišiškių-man-17-ryt-išteku-antrą-kartą“. Prasta dirva
Perlinėms idėjoms sėti. Dar šiek tiek pasėdėjau, pasimaliau šokių aikštelėje
(nepadėjo ten nei mirkčiojimas nei šypsenos), užsisakiau alaus. Tuo metu
prasidėjo pagrindinė LVS programa, kurioje koncertavo kažikokie transvestitai
iš Baltarusijos (Ar ponas Lukašenka negalėtų pasiimti savo transvestitų ir
laikyti juos kur nors giliai Saugumo rūsiuose Minske? Ačiū.) Na, kai vietoj
mano Švyturio alaus atnešė Utenos, man trūko kantrybė ir išėjau link namų.

Ėjau sau ramiai Basanavičiaus gatve, paskui Vytauto prospektu, mąsčiau kad
reikės poryt į darbą, galvoje man grojo visą šią dieną klausyta Metallica…
Jau visai prie pat namų tokioj tamsioj vietoj girdžiu kažkas atbėga iš
nugaros. Atsisuku, gaunu smūgį į dantis. Ten kaip sako žmonėm prieš mirtį
gyvenimas pro akis pralekia, tai man taip pragrojo ta scena iš filmo
„Fight Club“ kur vyksta šis dialogas:

Tyler: Never been in a fight, you?

Narrator: No, but that’s a good thing.

Tyler: No, it is not. How much can you know about yourself if you’ve never
been in a fight?

Na ką gi, mano rankose puikus ginklas – skėtis su kampuota rankena,
esu įkvėptas Fight Club ir dar neblaivus, tad nieko nelaukęs trenkiu su skėčiu
užpuolikui per veidą ir per daug nieko nemąstęs dedu į kojas. Tų užpuolikų
nevienas, o trys, bet jie ten persigrupuoja ar ką ten daro (na, gal jiems
tiesiog lagina), nes pastebi jog aš bėgu tik tada kai jau aš būnu nubėgęs
kokią dešimt metrų. Tiesa, kai bėgi ir tavyje tūno keletas bokalų alaus tai ne
taip greit bėgasi kaip norėtųsi, tad mane paveja. Tiesa, esu jau prie pat
Vytauto gatvės, ten šviesu. Paviję mane nustumia, patogiai atsisėdu ant
asfalto ir prasideda derybos. Pirmiausia esu apkaltinamas kad žaidžiu ne pagal
taisykles (Ble, kur bėgi?), į tai aš atsakau šiek tiek riebiau
([3.14]zdinkit nx – vienas dalykas, kurį mane išmokė IRC
programuotojų kanalai, tai efektingai keiktis. Ačiū jums, kolegos). Paskui
pateikiami reikalavimai (Atiduok visus daiktus – švari kalba lyg
iš Jablonskio veikalų be jokių rusicizmų keiksmažodžių pavidale). Permąstau ką
aš čia gero turiu kišenėse. Piniginėje kokia 30 litų – negaila, jei man
kortelę paliktų ir dokumentus. Dar turiu mobilką ir Flash USB raktą pilną
visokios naudingos kompiuterastinės informacijos. Ne tiek būtų būtų gaila
mobilkos kiek būtų gaila ten suvestų telefonų (hmm… reikia backupus
pasidaryt). Vytauto prospektas už kokių 5 žingsnių tad nutariu kovoti už savo
turmą informaciją ir neatiduoti jos niekam. Atsikeliu ir bėgu, niekas manęs
nesulaiko, nes jiems čia per daug arti žmonių akių. Sunkus gi tų plėšikų
darbas, čia ne prie kompo naktimis sėdėt PHP keiksnojant.

Na nueinu į artimiausią restoraną, apsiprausiu, iškviečiamas taksi, esu
namie, naktis baigėsi. Gulėdamas jau lovoj mąstau jog Lietuva tikrai blogoj
padėtyje, nes net plėšikai kažkokie lameriai, nesugebėję trise susitvarkyt su
moxliuku vidury tamsios nakties. Iš vis ar dar yra pas mus gerai savo darbą
atliekančių žmonių?

Na ryte pagalvojau kad kaip pilietis, turiu pranešti apie šį įvykį
policijai, nes gal kitą naktį bus užpultas ne moxliukas su skėčiu
prisižiūrėjęs Fight Club, o kokia nusigėrusi šešiolikmetė iš Kelmės, šventusi
savo gimtadienį (lyg būtų gaila). Na, nuėjau, papasakojau, nesugebėčiau aš jų
atpažint, nesiruošiu ten rašyt pareiškimų ar dar bile ko. Padėkojo man dėdės
policininkai ir sakė atkreips didesnį dėmesį į tą tamsų ir klastingą
problematišką rajoną. Tai vat. Lūpa truputį prakirsta, bet jaučiuosi dabar
užtad pailsėjęs ir pasiryžęs kibti į naujus darbus.

Kelios dienos atostogų

Na va, kitą savaitę ištisas tris dienas prisijungsiu prie visų atostogaujančių tautiečių armijos, vaikščiosiu kokio nors kaimo
keliukais, spardysiu akmenis bei šiaip nieko neveiksiu bandydamas negalvoti apie kompiuterius ir kitus su darbu susijusius dalykus. Tai
turbūt reiškia, kad čia irgi nepamatysit per daug naujų rašliavų. Vasara – internetinių dienoraščių tuštėjimo metas.

Na, bet kol visai neišvykau į kokį nors kaimą ir neatsijungiau nuo civilizacijos reikia daug nuveikti. Pirma, reikia galų gale paleisti
majordomo (bent jau atrodo prie to apsistojau), nes paskutinėmis darbo dienomis reikia labai intensyviai dirbti ir nelieka laiko žaistis su asmeniniu serveriu. Antra, reikia gražiai išguldyti perl.lt viziją elektroninėje formoje, kad ją galėtų pamatyti ir
kritikuoti visi kas netingi. Trečia, einu šiandien su Nightblade į „Gravity“, tad po truputį darausi „ klubų
liūtas“, kaip kad išsireiškė Nightblade. Žodžiu vėl reikės skleisti gerąją naujieną apie Perl visoms sostinės merginoms. Palinkėkit man
sėkmės ;)

Perl.lt susirašinėjimo sąrašas

Vakar prisiruošiau paskambinti tėčiui į Kauną ir paprašyt kad
perkrautų mano serveriuką, nes jis jau kokią savaitę dingęs iš
Interneto. Na viskas gerai, viskas pasikėlė, viskas veikia. Tad galvoju
pats laikas pakurti mailing listą (susirašinėjimo sąrašą ;) ir CVS.
Pradėjau nuo elektroninio pašto. Kiek suprantu tai dažniausiai tokiems
dalykams naudojamas GNU Mailman, rašytas Pythonu. Per
apt-get susidėt sunkoka, nes man jis bando įgrūst dar ir
senesnę Apache, tad ėmiausi standartinių priemonių grūsti viską iš
pradinių kodų, juolab kad serveriukas ten eksperimentinis. Viskas lyg
pasikūrė, viskas tvarkoj. Kol nepabandžiau nueiti per http ten kur turi
būt archyvuojami laiškai. Serveriukas dirbo suprakaitavęs.
top rodo apkrovas apie 16-18. Po penkių minučių vis tiek
nesulaukiau jokios žinios iš serverio. Aišku Pitonas čia eina per CGI,
aišku RAMo tėra tik 16MB (aš optimistas gi), bet juk Perlinės
programėlės be problemų veikia, ir SWAPe tik keli megabaitai guli :/

Žodžiu su Mailman nieko nebus. Na, idėjiškai tai ir negerai būtų
naudoti Pitono kodą Perliniams reikalams ;) O jei rimčiau tai reikės
pasiieškoti ko nors paprastesnio, arba tiesiog rankutėmis koreguoti
/etc/aliases kai reikės ką nors pridėti prie sąrašo, bei
pasirašyti trumpą Perlinę programėlę pašto archyvavymui. Juk čia nėra
didelė ir daug atminties ryjanti užduotis. Bent jau taip galvojau kol
Mailmano neturėjau ;)

Gobbitas.lt užlenktas

Kaip visada tik atėjęs į darbą peržvelgiu kolegų dienoraščius internete, persiskaitau viską, ir tada, giliai įkvėpęs atsiverčiu
manualus ir kimbu į darbą. O štai šiandien nueinu pasižiūrėti į Gobbito rašliavas ir laukia manęs didelis nusivylimas – „užlenkiau and so on“. Gobbitas buvo turbūt pirmas lietuviškas interneto dienoraštininkas, ir tik po
metų kai jau gyvavo jo dienoraštis, kaip grybai pradėjo augti ir kiti dienoraščiai. Dabar jau irgi po truputį gaunasi taip kaip ir gūdžiais 1996, kai kiekvienas turėdavo svetainę savo katei ir šuniui – lygiai taip ir dabar visi turi turėti dienoraštį. Bet turbūt nedaugelis įsivaizduoja ką reiškia turėti dienoraštį. Kartais reikia nežmoniško užsispyrimo, kantrybės ir dar kažko kad imtum ir parašytum ką nors į dienoraštį. Ir ne šiaip ką nors, o ką nors įdomaus, ką nors kas skaitytoją priverstų juoktis („na gerai tu čia pavarei, kompiuteraste“), piktintis („nesąmonė kad Perlas geriau už PHP!“) ar tiesiog stebėtis („oh, negalvojau kad ir tam yra Perlo modulis“). Tai sunkus darbas.

Paskutiniu metu nors dienoraščių ir pridygo, bet jie manęs per daug nedomina. Vieni jų yra retai atnaujinami, kiti visai nekompiuterastiniai ;) Ypač dienoraščiai prislopo vasarą – niekas neturi laiko sėdėti prie kompiuterio ir rašyti kažką į dienoraštį, nes ir taip yra ką veikti. Gobbitas buvo dienoraščių pradininkas. Bijau kad gali būti taip jog jis gali būti ir dienoraščių užsidarymų pradininkas. Gal būt dienoraščių manijos banga kaip tik šiuo metu pasiekė aukščiausią tašką ir pamažu pradės slūgti paskui save palikdama nebaigtus, pusiau pradėtus, dėmesio stokojančius dienoraščius interneto platybėse. Nors gal ir klystu.

Apache įdomybės

Kažkaip paskutiniu metu Apache pradėjo keistai elgtis. Na, gal ne
paskutiniu metu, bet vis tiek keistai. Nightblade man pasakė, jog
jam staiga pradėjo rodyti mano weblogo sourcą. Pagal visus Apache logus
tai tik vieną kartą jam buvo persiųsta tiek baitų kiek yra source, o
daugiau matyt tik kešuojama kažkur pas jį proksiuose ar dar kur nors.
Kas keisčiausia, tai error.log yra visiškai tuščias ir
švarus. Hmm… Tiesiog vieną kartą netyčia nesuveikė mod_perl, nes buvo
per didelė apkrova? Nors tuo metu neturėjo būti serveris apkrautas. O ir
atrodo daugiau tokių dalykų nesimato loguose. Keista.

Besižiūrinėdamas logus prisiminiau dar vieną su serveriu susijusią
keistenybę. Čia vidiniam naudojimui yra naudojamas webmailas –
būtent Squirrelmail (taip, taip, buvo jame XSS riktų, čia lyg užlopiau).
Keisčiausia, jog negalima pakeisti jokių nuostatų iš vartotojo pusės
(nusistatyt kalbą, temą ir panašiai). Atrodo lyg veikė seniau gerai :/
Visos permisijos ant duomenų direktorijų nustatytos tikrai gerai (netgi
per daug atvirai nei reikia, bet vis tiek neveikia). Pasirodo, Apache
error.log bandant ką nors padaryt Squirrelmaile atsiranda
įrašas apie mirusį vaiką dėl segmentavimo klaidų (heh, keistokai
lietuviškai skamba tas „Segmentation fault: child died“)
Pasigooglinau. Pasirodo šiuo atveju kreivas PHP. Persikompiliavau pats
PHP (o ne iš Debiano paketų sudėjau), viskas veikia. Tik su Nightblade
vis dar keistenybės. Gal reiktų ir Apache savo susikompiliuot :/

perlreref pradinis vertimas

Štai pirmasis juodraštinis variantas. Labai sunku versti, nes daug sunkiai išverčiamų terminų ;) Na bet gal kam nors bus naudinga.

PAVADINIMAS

perlreref – Perlo įpraiškų žinynas

APRAŠYMAS

Tai trumpas Perlo įpraiškų žinynas. Pilnos informacijos apie
įpraiškas ieškokite perlre ir perlop dokumentacijos skyriuose,
o taip pat šio žinyno TOLIMESNĖ INFORMACIJA skyriuje.

OPERATORIAI

  =~ nustato kuriam kintamajam taikyti šabloną.
     Jei nenurodoma, naudoja $_                      
                                                        
        $var =~ /foo/;                             

  m/įpraiška/igmsoxc ieško simbolių eilutėje įpraiškos atitikimo,
     su šiais galimais nustatymais:

        i  Nekreipiant dėmesio į didžiąsias/mažąsias raides
        g  Globalus - visi atitikimai
        m  Per kelias eilutes - ^ ir $ atitinka vidines eilutes
        s  Taikyti kaip vienai eilutei - . atitinka \n
        o  Kompiliuoja įpraišką tik vieną kartą
        x  Išplėstinės įpraiškos - galima naudoti tarpus ir komentarus
        c  Neatitaisyti pos kai įpraiška neatitinka eilutės naudojant /g

     Jei 'įpraiška' yra tuščia eilutė, vietoje jos naudojama paskutinė 
     sėkmingai atitikusi įpraiška. Galima naudoti ir kitokius skirtukus 
     nei '/' tiek šitam operatoriui, tiek ir žemiau aprašytiesiems.

  qr/įpraiška/imsox leidžia išsaugoti įpraišką į kintamąjį ar perduoti į 
     funkciją. Modifikatoriai saugomi kartu su įpraiška, kaip ir m// atveju.

  s/įpraiška/pakeitimas/igmsoxe pakeičia simbolių eilutėje atitikusias 
     'įpraišką' dalis į 'pakeitimą'. Modifikatoriai tokie patys kaip ir
     m// atveju, tik su vienu papildymu:

        e  Įvykdyti 'pakeitimą' kaip Perlo kodą

     'e' gali būti nurodytas ir keletą kartų. 'pakeitimas' yra 
     interpretuojamas kaip simbolių eilutė tarp dvigubų kabučių, nebent šio 
     operatoriaus skirtukas yra vienguba kabutė (').

  ?įpraiška? lygiai taip pat kaip m/įpraiška/ tačiau atitinka tik vieną kartą.
     Negalima naudoti jokių kitų skirtukų. Turi būti atstatyta su 'reset'.

SINTAKSĖ

   \       Išvengia tuoj po jo einančio simbolio meta-reikšmės
   .       Atitinka bet kurį vieną simbolį išskyrus naujos eilutės simbolį
	       (nebent naudojamas /s modifikatorius)
   ^       Atitinka teksto pradžią (arba eilutės pradžią, jei naudojamas /m)
   $       Atitinka teksto pabaigą (arba eilutės pabaigą, jei naudojamas /m)
   *       Atitinka prieš tai einantį elementą 0 ar daugiau kartų
   +       Atitinka prieš tai einantį elementą 1 ar daugiau kartų
   ?       Atitinka prieš tai einantį elementą 0 ar 1 kartų
   {...}   Nurodo prieš tai einančio elemento pasikartojimų intervalą
   [...]   Atitinka kurį nors simbolį ir nurodytos aibės
   (...)   Sugrupuoja išraiškas ir priskiria jų rezultatus $1, $2...
   (?:...) Sugrupuoja išraiškas be rezultatų priskyrimo
   |       Atitinka išraišką iš dešinės ARBA iš kairės (alternatyva)
   \1, \2 ...  Tekstas iš N-tosios grupės

SPECIALIOSIOS SEKOS

Šios sekos veikia taip kaip ir paprastose simbolių eilutėse:

   \a       Skambutis
   \e       Escape
   \f       Formfeed
   \n       Newline - nauja eilutė
   \r       Carriage return
   \t       Tab
   \038     Bet kuri aštuonetainė ASCII reikšmė
   \x7f     Bet kuri šešioliktainė ASCII reikšmė
   \x{263a} Plati šešioliktainė reikšmė
   \cx      Control-x
   \N{name} Vardinis simbolis

   \l  Mažosios raidės iki kito simbolio
   \u  Didžiosios raidės iki kito simbolio
   \L  Mažosios raidės iki \E
   \U  Didžiosios raidės iki \E
   \Q  Išjungia metasimbolius iki \E
   \E  Didžiųjų/mažųjų raidžių transformavimo pabaiga

Ši seka veikia skirtingai nei simbolių eilutėse:

   \b  Žodžio riba, o ne "backspace", išskyrus simbolių aibėse

SIMBOLIŲ AIBĖS

   [amy]    Atitinka 'a', 'm' ar 'y'
   [f-j]    Brūkšnelis nurodo "intervalą"
   [f-j-]   Brūkšnelis pačioje pradžioje ar pabaigoje reiškia brūkšnelį
   [^f-j]   Stogelio ženklas reiškia "atitinka viską kas NĖRA aibėje"

Šios sekos veikia tiek aibėse, tiek ir už jų:

   \d      Skaitmuo, tas pats kaip [0-9]
   \D      Ne skaitmuo, tas pats [^0-9]
   \w      Raidės arba skaičiaus simbolis, tas pats kaip [a-zA-Z_0-9]
   \W      Ne raidė ir ne skaičius, [^a-zA-Z_0-9]
   \s      "Baltas" simbolis, tas pats kaip [ \t\n\r\f]
   \S      "Nebaltas" simbolis, [^ \t\n\r\f]
   \C      Atitinka baitą (Unikode '.' atitinka simbolį)
   \pP     Atitinka P-vardo (Unikodinę) savybę
   \p{...} Atitinka Unikodo savybę ilgu pavadinimu
   \PP     Atitinka ne-P savybę
   \P{...} Atitinka ne-P unikodinę savybę ilgu pavadinimu
   \X      Atitinka išplėstinę Unikodinę seką

POSIX simbolių aibės bei jų Unikodiniai bei Perlo atitikmenys

   alnum   IsAlnum             Raidės ir skaičiai
   alpha   IsAlpha             Raidės
   ascii   IsASCII             Bet koks ASCII simbolis
   blank   IsSpace  [ \t]      horizontalūs "balti" simboliai (GNU)
   cntrl   IsCntrl             Konrolės simboliai
   digit   IsDigit  \d         Skaitmenys
   graph   IsGraph             Raidės, skaičiai ir skyryba
   lower   IsLower             Mažosios raidės (pagal lokalę)
   print   IsPrint             Raidės, skaičiai, skyryba, tarpų simboliai
   punct   IsPunct             Skyryba
   space   IsSpace  [\s\ck]    "Balti" simboliai
           IsSpacePerl   \s    "Balti" simboliai pagal Perlo apibrėžimą
   upper   IsUpper             Didžiosios raidės (pagal lokalę)
   word    IsWord   \w         Raidės, skaičiai ir _ (Perlas)
   xdigit  IsXDigit [\dA-Fa-f] Šešioliktainis skaitmuo

Simbolių aibėse:

    POSIX       tradicinis    Unikodas
    [:digit:]       \d        \p{IsDigit}
    [:^digit:]      \D        \P{IsDigit}

INKARAI

Visos šios sekos tik nurodo kurioje vietoje reikia taikyti šabloną.

   ^  Atitinka teksto pradžią (arba eilutės, jei naudojamas /m)
   $  Atitinka teksto pabaigą (arba eilutės, jei naudojamas /m) arba prieš naują eilutę
   \b Atitinka žodžio ribą (tarp \w ir \W)
   \B Atitinka ne žodžio ribą
   \A Atitinka teksto pradžią (nekreipia dėmesio į /m)
   \Z Atitinka teksto pabaigą (prieš pabaigą einančią nebūtiną \n)
   \z Atitinka absoliučią teksto pabaigą
   \G Atitinka tą vietą, kurioje darbą baigė paskutinis m//g 
   \c Iš naujo nenustatinėja paieškos vietos kai naudojamas /g.
      Be \c, kiekvieną kartą pradedama ieškoti nuo pradžios

KIEKINĖS SEKOS

Kiekinės sekos automatiškai atitinka ilgiausią seką iš kairės.

   Maksimalu Minimalu Leidžiamas intervalas
   --------- -------- ---------------------
   {n,m}     {n,m}?  Turi būti ne mažiau kaip n kartų, bet ne daugiau nei m kartų
   {n,}      {n,}?   Turi būti bent n kartų
   {n}       {n}?    Turi būti lygiai n kartus
   *         *?      0 arba daugiau kartų (tas pats kaip {0,})
   +         +?      1 arba daugiau kartų (tas pats kaip {1,})
   ?         ??      0 arba 1 kartą (tas pats kaip {0,1})

IŠPLĖSTINĖS SEKOS

   (?#tekstas)        Komentaras
   (?imxs-imsx:...)   Įjungia/išjungia nustatymą (taip kaip ir m//)
   (?=...)            Nulinio ilgio teigiamas sprendinys už šios vietos
   (?!...)            Nulinio ilgio neigiamas sprendinys už šios vietos
   (?<...)            Nulinio ilgio teigiamas sprendinys prieš šią vietą
   (?<!...)           Nulinio ilgio neigiamas sprendinys prieš šią vietą
   (?>...)            Atitikti kiek galima daugiau nesaugant reikšmių kintamuosiuose
   (?{ kodas })       Įterptas kodas, grąžinta reikšmė tampa $^R
   (??{ kodas })      Dinaminė įpraiška, grąžinta reikšmė panaudojama kaip įpraiška
   (?(sąlyga)taip|ne) Sąlyga yra skaičius atitinkantis skliaustelius
   (?(sąlyga)taip)       

KINTAMIEJI

   $_    Kintamais pagal nutylėjimą, kurį naudoja operatoriai
   $*    Įjungia šablonų taikymą keletui eilučių (nenaudotinas; nebėra 5.8.1+ versijose)

   $&    Visa simbolių eilutė, kuri atitiko
   $`    Viskas iki atitikusio simbolių eilutės
   $'    Viskas po atitikusios simbolių eilutės

Šių trijų kintamųjų vartojimas sulėtins visas įpraiškas jūsų programoje.
Pasiskaitykite perlvar dokumentaciją apie @LAST_MATCH_START
masyvą bei ką daryti kad sulėtėjimo nebūtų.
Taip pat žiūrėkite Devel::SawAmpersand modulio dokumentaciją.

   $1, $2 ...  saugo n-tąją išsaugotą seką
   $+    Paskutinė skliausteliuose išsaugota seka
   $^N   Holds the most recently closed capture
   $^R   Saugo (?{...}) išraiškos rezultatą
   @-    Saugo grupių pradžios vietas. $-[0] saugo viso atitikimo pradžią
   @+    Saugo grupių pabaigos vietas. $+[0] saugo viso atitikimo pabaigą

Grupės yra numeruojamos pagal atsidarančius skliaustelius.

FUNKCIJOS

   lc          Pakeisti simbolių eilutę į mažąsias raides
   lcfirst     Pakeisti simbolių eilutės pirmą simbolį į mažąjį raidę
   uc          Pakeisti simbolių eilutę į didžiąsias raides
   ucfirst     Pakeisti simbolių eilutės pirmą simboliį į didžiąją raidę
   pos         Grąžinti arba nustatyti dabartinę įpraiškos atitikimo vietą
   quotemeta   Išvengti meta simbolių
   reset       Atnaujina ?pattern? statusą
   study       Analizuoja simbolių, kad galėtų optimizuoti įpraiškų taikymą

   split       Naudoja įpraiškas skaidant eilutę į dalis

AUTORIUS

Iain Truskett.

Šis dokumentas platinamas tokiomis pat sąlygomis kaip ir pats Perlas.

Vertė: Petras Kudaras. Laukiu pataisymų, nes vertimas baisus.

TOLIMESNĖ INFORMACIJA

  • perlretut pamokos apie įpraiškas.

  • perlrequick greitos pamokos apie įpraiškas.

  • perlre detalesnei informacijai.

  • perlvar detalesnei informacijai apie kintamuosius.

  • perlop detalesnei informacijai apie operatorius.

  • perlfunc detalesnei informacijai apie funkcijas.

  • perlfaq6 dažnai užduodamiems klausimams apie įpraiškas.

  • re modulio, kuris pakeičia įpraiškų veikimą ir padeda jas
    išriktinti, dokumentacija.

  • perldebug — Įpraiškų išriktinimas

  • perluniintro, perlunicode, charnames ir locale
    detalesnei informacijai apie įpraiškas ir internacionalizaciją.

  • Mastering Regular Expressions, Jeffrey Friedl
    (http://regex.info/) geram įpraiškų supratimui.

DĖKUI

David P.C. Wollmann,
Richard Soderberg,
Sean M. Burke,
Tom Christiansen,
Jim Cromie,
ir
Jeffrey Goff
už naudingus patarimus.

Švenčiu gimtadienį

Štai vakar buvo mano gimtadienis. Na, jeigu gimtadienis, tai reiškia reikia jį atšvęsti. Pasiklausinėjęs #php, ar kas eina gert, supratau, kad iš PHPistų sugėrovų nebus. Kadangi žvėriškai norėjau valgyti, tai išsiruošiau į miestą. Kokią 18 val pavalgiau „Čili“ picerijoje (tiesa, labai įdomiai buvo užlinkęs GPRS ryšys, tad valgydamas ganėtinai nuobodžiavau, nes neturėjau priėjimo prie interneto. Galėtų „Čili“ turėti bent laikraščių ar dar ko nors, nes labai lėtai laikas stumiasi belaukiant maisto, ypač jei esi alkanas ir šventi savo gimtadienį ir net nežinai ar bus su kuo jį švęst). Kol valgiau, susiSMSinau su keliais žmonėmis, ir pamažu pradėjo aiškėti šventimo planas. Susitariau susitikti su viena drauge (taip, moteriškos lyties) jos bute, bet tik už valandos, tad reikėjo tą laiką kažkaip prastumt. Nuėjau į interneto kavinę. Paskaičiau perlmonks.org bei
Slashdot.org. Kadangi po didelės petraukos sėdėjau prie mIRC, tai man jis pasirodė labai nepatogus IRC klientas. Pasirodo norint pasiųsti į kanalą tekstą, prasidedantį „/“ reikia spausti Ctrl+Enter. Na, kitą kartą žinosiu. Besėdėdamas internete
užtikau labai gerą svetainę apie „horror stories from computer tech-support“. Jeigu atknisiu linką tai būtinai parašysiu. Ten tokių juokingų dalykų pilna…

Anyway, internetas lieka internetu. Nuėjau pas draugę, išėjome į miestą, sutikome tamošių (hmm… kažkaip jis nebesireiškia pataruoju metu IRC?). Nuėjome pavalgyti ledų, pasėdėjome, pakalbėjome (ne apie Javą, ir ne apie Perlą…) Buvo jau kokia 22 valanda, tad dar pasivaikščiojome po miestą, paskui grįžom į jos butą išgerti arbatos ir taip pamažu atslinko naktis. Apie vidurnaktį buvo pasiūlyta pernakvoti ant sofos, bet aš atsisakęs išėjau į miestą.

Na, kai esu toks labai jau „dažnas“ klubų lankytojas, tai nežinau nei kur reikia eiti, nei kur yra gerai. Atsidūriau „Brodvėjuj“. Buvau visai blaivas, o kad atlaikyt visą tą baisią muziką tai reikia nemažai alaus. Na išlenkiau bokalą. Netikėtai pastebėjau, kad kišenėse turiu tušinuką, bei prisiminiau, kad „Brodvėjaus“ tuoletai yra labai aprašinėti visokių „čia buvo Vasia“ ir „paskambinkit man telefonu +370xxxxxxxx“. Ryžtingai patraukiau tuoleto link, atstovėjau eilę ir užuot atlikęs gamtiškus
reikalus ant sienos iškeverzojau „#!/usr/bin/perl -w use strict;“. Patenkintas, kad atlikau tokį politinį žygdarbį, tą patį pakartojau ir antro aukšto tuoletuose. Visgi po to pamąsčiau jog „Brodvėjus“ turėtų būti tam kad kabinti merginas ir šokti pagal Maestro Rytį Ciciną, tad giliai įkvėpęs atsidūriau šokių aikštelėje. Iš manęs šokėjas aišku menkas. Ypač kai esu tik po vieno alaus bokalo. Kažkokia mergina ganėtinai ilgai mane stebėjo, o paskui priėjo, atsiprašė jog turi išeit, nes rytoj jai 6 keltis (wtf? juk sekmadienis…) ir pasakė jog „aš turiu gražius plaukus“. Na, nesu pratęs prie komplimentų, tad pastovėjau su šypsena veide, palinksėjau galva ir pamąsčiau kad reikia eit prie baro ir gauti daugiau velnio lašų. Gana tradiciškai nusipirkau „Jack Daniels“ viskio, atsisėdau ant laiptų ir jį gurkšnodamas pradėjau naršyti
internetą per mobilką. Apsilankiau savo webloge, pamačiau godzhirra_da_mc komentarą kuriame aš laikomas autoritetu,
susigraudenau ir pamąsčiau jog reiktų baigti kvailioti, rašinėti ant sienos, gerti viskį ir galvoti apie merginas, nes tokie mano veiksmai gali daryti įtaką šiuolaikiniam jaunimui. Po to dar kartą nuėjau į perlmonks.org, pastebėjau ten klausimą apie skaičių normalizavimą ir labai buvo gaila, jog per mobilų negaliu į jį atsakyti :/

Kol visa tai vyko, prispyrė į tuoletą, tad nuėjau pasinaudoti tiesioginėmis jo teikiamomis paslaugomis. Pastebėjau, jog buvau pamiršęs savo keverzonėje vieną slashą, tad ištaisiau šią apmaudžią klaidą. Grįžau padrąsėjęs į šokių aikštelę. Pradėjau testuoti teoriją, jog jei šypsosiesi merginai ir žiūrėsi jai į akis, tai ji atsakys tuo pačiu. Veikia kokia 70-80%. Čia beveik kaip pingas – sugauni žvilgsnį, nusišypsai, tą patį gauni atgal. Tiesa, kai kurios visai nesipingina. Ar koks firewallas pas jas ar kokiu nors uždaru protokolu jos bendrauja, nežinau. Kaip visada, gražiausios merginos buvo užimtos, bet kaip pastebėjau, šiuo protokolu jos vis tiek yra linkusios bendrauti. Tai va, ramiai darau šiuos mokslinius stebėjimus (nors jei „pinginu“ merginas su vaikinais tai rizikuoju gauti į dūdą, bet mokslui reikia aukų) ir staiga kažkokia vos ne trisdešimtmetė ima man dėkoti kad aš šokau su ja. Nė velnio aš nešokau. Čia kaip gauti FIN paketą, kai ryšys nebuvo užmegztas. Hrr… Kaip pastebėjau, „Brodvėjus“ buvo pilnas visokių keistų užsieniečių, ar tai italų ar dar kažko, tik teko stebėt vargšes lietuvaites gana nuobodžiai ramiomis akimis žiūrinčias į vieną tašką su sustingusia šypseną ir kartais palinguojama galva stiliumi „taip, taip, aš dar čia ir tipo dar klausau ką burkuoji“, bei užsieniečius, kažką bandančius joms šnibždėt.

Žodžiu šokau iki kokios 2 val. Tada sutikau ecco ir dar porą pažįstamų, kurie kaip išsireiškė turėjo „men’s night out“. Mokslinius tyrimus teko atidėti į šalį, nors matyt įdirbis jau buvo padarytas, nes jie man sakė jog tam tikra mergina per ne lyg dažnai žvilgčiojo į mane ir matyt kažko iš manęs norėjo. Tai tiek apie tai.
Akys greitai merkėsi, paėmiau taksi ir grįžau namo. Taksistas pasitaikė kalbus vyrukas, pakalbėjom su juo apie kompus (jis man sakė kad serverinėse turėtų būti labai karšta, aš jam įrodinėjau kad ten yra kondicionieriai). Grįžęs dar lovoje pasitikrinau per mobilų savo weblogą, ir kai laikrodis rodė 4:36 nuėjau miegot (turėjau dar minčių visa tai aprašyt iš karto, bet paskui nusprendžiau kad rytas protingesnis už vakarą).

Tai toks vat 21-asis gimtadienis.