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

Frontpage vartotojai

Man nedažnai tenka bendraut su klientais, kuriems reikai atlikti
kokius nors internetinių svetainių programavimo darbus, tad šiandien
susitikimas su vienu tokiu man pasirodė labai keistas. Užsakovas, firmos
vadovas buvo labai malonus, viskas ten su juo sutarta, viskas tvarkoj.
Perdavė jis tą visą reikalą tvarkyt vienam tokiam darbuotojui, kuris
matyt kompanijoj daugiausiai nusimano apie kompiuterastinius
internetinius dalykus (beje, kompanija yra labai maža, gal tik kokie 5
darbuotojai). Visa problema tame, kad jis mano jog nusimano labai gerai,
nes minimaliai moka naudotis Frontpage (na,
„minimaliai“ tai reiškia „moka įterpti nuorodą
grafiniame režime“). Ok, gal kažkada vaikystėj jis netgi žiūrėjo į
kokio nors puslapio HTML kodą, bet matyt nelabai suprato. Esmė tame, kad
nurodinėdamas ką reikia padaryti jis kartu nurodinėja ir technologijas,
nes kaip jis paaiškino, „jis pats paskui norės keisti dizainą, su
Frontpage kišti papildomus meniu ir panašiai“. Žiaurus atvejis.
Aišku jei tai nebūtų 5 žmonių kompanija ir turėtų bent šiek tiek pinigų,
tai būtų galima siūlyt jam CMS sprendimą, bet čia jiem sunkiai įkandama
(heh, pusvalandį aiškinom, kad .lt domeino jis negaus pigiau nei prašo
LITNET ;)

Žodžiu gaunasi, taip, kad esam jo labai specifinių norų (kurie yra
visai neparemti – negi labai dažnas poreikis pačiam klientui be
niekeno pagalbos persidizaininti svetainę?) apriboti kokiu nors
„text-only“ dizainu (na, aš tai nieko prieš, juk ši svetainė
yra galima sakyt „text-only“, bet pabandyk tu tai pasakyt
dizaineriui ;) ir viską privalom daryt freimais (jam labai nepatikimai
atrodo PHP šablonų idėja – vien dėl to, kad jis mano jog nesupras
kur ką keisti). Na, man dėl tokių dalykų neverta jaudintis, nes ne aš
juk darysiu visą tai, bet svarbiausia, kad jiems reikia dar ir prekių
katalogo (t.y. duombazės). Va čia prasideda įdomybės, kai užsakovas mano
jog jis žino geriau ko jam reikia ir bando nurodinėt iki tokio
absurdiškų dalykų kaip pačios duombazės lentelės ir struktūra. Na, man
nebūtų gaila, jei už tai mokėtų, nors ir tai nesinorėtų daryt projekto,
kuris aišku bus šleivas kreivas, vien dėl to kad buvo liepta daryt
būtent taip.

Na, tai buvo pirmas susitikimas su šiuo klientu, ir man atrodo jog
tas „klientas visad teisus“ principas kartais pervertinamas.
Žodžiu kai kitą kart susitiksim reikės paaiškint kad arba jie leidžia
mums daryti implementaciją patiems (t.y. tegu pasako padaryt,
ir tegu nelenda į kaip tai daryt) arba teks ieškotis kitų
programuotojų. Ypač dėl to, kad ir atlygis tik kapeikos.

Perl bendruomenė

Vakar po truputį pradėjau grįžinėti į IRC, bet tai kažkaip tai
džiaugsmo neteikia. Atrodo kad #perl kanale vyrauja ganėtinai slogi
pesimizmo pilna nuotaika. mr2 visai nusivylęs bet kokiomis
pastangomis ir idėjomis pasiekti kažką vardan perlo Lietuvoje, nebemato
visiškai jokios perspektyvos, nes jo nuomone tiesiog neliko normalių perl
programuotojų. Prisiminėm tuos laikus, kai #perl kanale sėdėdavom trise ir
tai buvo labai geri laikai. Matyt senstam mes, nostalgija mus apėmusi. Na,
dabar kanale yra virš 20 žmonių, bet dauguma jų tik dėl
„masės“, nemokantys ir kas turbūt dar baisiau, visai
nesidomintys Perlu. Na, #php kanalas irgi praėjo šią stadiją, dar
prisimenu kad kažkada ModeL bei pukomuko tvirtindavo jog jie
tame kanale nesėdės, nes ten pilan vaikų, nieko nesuprantančių. Tas pats
vyksta su #perl, ir mums, seniams, tai neatrodo labai sveikintinas
dalykas. Nežinau, turbūt to neįmanoma išvengti. Kol kas vis dar manau, jog
#perl yra žymiai draugiškesnis naujokams nei bet kuris kitas programavimo
kanalas (pamenu kaip Nightblade pats bėgdavo skaityt manualo ir
pateikdavo pilnai parašytą programą klausiančiam patarimo žmogui), tačiau
daugėjant žmonių, kurie patys lyg ir nebepalaiko tokios Perlo bendruomenės
dvasios darosi vis sunkiau.

Nežinau kiek tai rimta, bet mr2 pareiškė turįs idėją atsisakyti
#perl kanalo founder’io statuso ir galbūt visai pasitraukti
iš Perl bendruomenės, nes jis nebemato prasmės. Galbūt tai netiesa, ir aš
norėčiau, kad tai nebūtų tiesa. Aš iš Perlo mylėtojų draugijos kol kas
nesiruošiu pasitraukti, nors ir likčiau vienas ;) ir toliau stengsiuosi
populiarinti Perlą, ir svarbiausia, padėti tiems, kas nori jo išmokti.
Nežinau ar man tai seksis, ar tai kam reikalinga, tačiau man patinka
padėti žmonėms perlo klausimais, ir jei bent vienam padėjau, tai manau
buvo verta.

Nelabai žinau kas laukia #perl kanalo, jei iš jo pasitrauks mr2.
Aš vis rečiau užsuku į IRC, tad iš senųjų žmonių ten liks tik
Nightblade (Tų senųjų žmonių ne tiek jau daug ir buvo… Dar nebent
katiba, kuri seniai pamiršusi perlą, kuriuo taip žavėjosi, bet taip
iki galo ir neišmoko).

turbūt pats didžiausias uždavinys yra sukurti bendrą lietuviškos
informacijos apie Perlą archyvą internete. Tai nemažai darbo, ir nežinau
ar tam bus laiko ir jėgų. Bet stengsiuosi.

Perlo „range“ operatorius

EnC manęs PHP forume paprašė paaiškint, kaip veikia Perlo „range“ operatorius. Nesinori PHP forumą teršti perliniais
dalykais, tad bandysiu tai paaiškinti čia. Beje, visa tai ką čia rašau galima rasti Perlo dokumentacijoje (konsolėje tereikia surinkt perldoc perlop).

Perlo „range“ operatorius žymimas dviem taškais, ir reiškia faktiškai du dalykus. Pirmoji reikšmė yra labai paprasta –
parašius 1..10 gausime reikšmių nuo 1 iki 10 sąrašą (list). Būtent ši operatoriaus reikšmė naudojama masyvų kontekste
(list context – kai reikia jog išraiška grąžintų masyvą, o ne skaliarą). Šitaip labai lengvai galima formuoti masyvus:

my @masyvas = 1..10;
# tas pats kaip @masyvas = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10);

Tačiau pats populiariausias šio dalyko panaudojimo būdas yra cikluose, nes vietoj sunkiai įskaitomo

for($i = 1; $i <= 10; $i++) {
# ... kažką darom 10 kartų
}

galima parašyti trumpai ir aiškiai:

for(1..10) {
# ... kažką darom 10 kartų
}

Kitas dažnas šio operatoriaus panaudojimas tame pačiame kontekste yra masyvų dalijimas (slice):

my @foo = (1, 2, 3, 4, 5, 6);
my @bar = @foo[3..5];
# @bar dabar yra (4, 5, 6);
my @baz = @foo[3..$#foo];
# @bar dabar irgi yra (4, 5, 6);

„Range“ operatoriui galima perduot ne vien skaitmenis, bet ir simbolių eilutes (pagal tam tikrą algoritmą bus didinami simbolių eilutės ASCII kodai), tad šis Perlo sakinys atspausdins visą anglišką abėcėlę:

print for 'a'..'z';

Arba tiesiog:

print 'a'..'z';

Vienas geriausių šio operatoriaus pliusų yra tas, kad jis neužsigrobia daug atminties yra intervalo „neišplečia“ atmintyje jei to būtinai nereikia, tad for(1..1000000) {...} nesukuria laikinojo masyvo su milijonu įrašų.

Jei intervalų sudarymas iš simbolių eilučių atrodo ganėtinai magiškai, tai patys didžiausi stebuklai prasideda tada, kai
„range“ operatorius naudojamas skaliariniame kontekste (kai išraiška turi grąžinti skaliarą, o ne masyvą). Dažniausiai taip šis operatorius naudojamas if sąlygoje. Šis operatorius grąžina 0 (false) iki tol kol kairė šio operatoriaus pusė pradeda
grąžint true, tada grąžina true iki tol kol dešinė pusė pradeda grąžint true. Lengviausia turbūt suprast pavyzdžiu:

while(<>) {
print if /PRADZIA/../PABAIGA/;
}

Šis kodas skaito iš bylos eilutes, ir spausdina tik tas, kurios yra tarp eilučių, atitinkančių įpraiškas /PRADZIA/ ir
/PABAIGA/. Tarkime jei byla bus:

foo
bar
PRADZIA
kazkas
dar
PABAIGA
nu
gi

bus atspausdinama tik kazkas ir dar (nespausdina kol neatitinka įpraiškos /PRADZIA/, o tada spausdina iki tol kol atitinka įpraišką /PABAIGA/) Magija čia nesibaigia. Jei vietoj įpraiškos įrašysim skaičių, jis bus magiškai lyginamas su $., kuris reiškia eilutės numerį. Tad kodas

print if 101..200;

atspausdins antrąjį šimtą eilučių.

„Sveikas, pasauli!“ konkurso rezultatai

Dėkui Sauliui, kuris priminė, kad reikia publikuoti „sveikas
pasauli!“ konkurso rezultatus, nes tai jau turėjau padaryti prieš
porą mėnesių ;)

Iš viso dalyvavo 5 dalyviai, iš kurių viena mergina (kas yra labai
malonu). Kadangi konkurso dalyvių ne tiek ir daug, tai sumaniau, kad
visiems jiems pastatysiu po bokalą alaus. Kadangi sau statyt alaus
kažkaip neišeina, tai šį papildomą atliekamą bokalą skiriu vienintelei
dalyvavusiai merginai (manau jūs pilnai sutiksite, kad jos darbas to
vertas). Visus darbus galite prsisiųsti viename tarball’e

Nekukliai pradėsiu nuo savęs. Mano
darbą
turbūt visi jau matė, nes aš jį buvau parodęs kaip pavyzdį, ką
galima sumąstyti, jei programuojama šiek tiek „perliškai“ ;)
jei kam ateityje bus įdomu, bandysiu paaiškint kaip tas kodas veikia
(taip, ten daug komentarų, bet jie irgi svarbūs. Bent jau įtariu koks
nors lint neturėtų padėti ;)

Labai maloniai mane nustebino pukomuko darbas. Labai efektyvus kodas.
Trumpas, aiškus ir pilnai optimizuotas.

why2liz atsiuntė darbą,
kuris, deja, veikia tik su CVS PHP versijom (dėl naudojamos f-jos
file_get_contents()). Bandykit išsiaiškint kaip tas
kodas veikia ;)

Saulius parašė Apache modulį C
kalba. Na, man C jau per sudėtinga, tas portabilus asembleris ne mano
jėgoms ;)

Na ir nugalėtoja… Tegu kalba pati už
save
, juolab kad padirbėjo iš peties. Ana, laukia tavęs du bokalai
alaus nuo manęs ir geriausios programuotojos vardas ;)

Įpraiškų programėlė

Aptikau ganėtinai įdomią
programėlę
, kuri vizualiai leidžia sudarinėti įpraiškas. Yra WIndows
ir Linux versijos. Turėtų labai padėti rašyti įpraiškas žmonėms kurie
nelabai jas dar moka ir supranta, o kartu ir palengvint tų baisių
triaukščių įpraiškų rašymą jau pažengusiems. Ši programėlė palaiko
„Perl compatible“ įpraiškų sintaksę, tad naudinga ir Perl,
ir PHP, ir dar visokiem kitokiem programuotojams.

Svetainės portabilumas

Teko truputį pasukt galvą mąstant kaip reikės padaryt
install skriptą šiai svetainei, jei kas norėtų tokį
dalyką pasikurti pas save. Atrodo, kad įdiegimo programėlė gali būti
sudėtingesnė už pačią svetainę ;)

Kol kas šios svetainės įdiegimui reikia root teisių, nes visas
dienoraščio pildymas veikia per elektroninį paštą (tad reikia priėjimo
prie /etc/aliases). Na, tai nedidelė problema
– galima pildymą daryti per HTML formas, apsaugotas slaptažodžiu.

Kitas svarbus dalykas yra Perlo moduliai. Na, didelės problemos su
jais irgi nėra, tik reikia jog įdiegimo skriptas pažiūrėtų ar yra
reikiami moduliai, jei jų nėra automatiškai parsiųstų, sukompiliuotų,
įdiegtų (jei daroma be root teisių – į
home direktoriją). Atrodo šioms užduotims yra atskiras Perlo
modulis (kažkas nustebęs? :)

Svarbi ir pati Perlo versija. Naudoju perl5.8.0, kuriam jau metai,
bet jis vis dar nėra įdiegiamas standartinėse Linux ir BSD
distribucijose. Iš esmės galima apsieiti be perl5.8.0, tačiau kyla
šiokios tokios problemos su koduotėmis. Arba pilnai reikia pereit prie
utf-8, arba pilnai pasilikt prie windows-1257 (dabar pati svetainė
veikia windows-1257, o RSS – utf-8)

mod_perl. Viskas čia sukasi ant mod_perl. Berods vienintelis modulis,
kuris naudojamas, ir kuriam reikia mod_perl yra
Apache::Session::MySQL (nors tuo nesu tikras, gal
jis veikia ir paprastai, be mod_perl. Reik dokumentaciją pasiskaityt).
Sesijos šioje svetainėje naudojamos tik statistikos sumetimais, tai iš
bėdos irgi galima išmest. Arba pakeist moduliu, kuris veiktų ir ant CGI.

Dar aišku įdiegimo skriptas turės daryti visokius
chmod ir bylų kopijavimus. Na, čia savaime
suprantama.

Kai susideda tiek visokių dalykėlių, tai turėtų gautis visai nemažas
įdiegimo skriptas. Čia beveik kaip ./configure
reikės milijoną dalykų probint ir bandyt įdiegti kiek galima daugiau
funkcionalumo :)

Komentarų kodo pokyčiai

Visgi pakeičiau šiek tiek kodą, visiškai jo neperrašydamas.
Komentarai nebeturėtų dubliuotis (tikiuosi). Sesijos pilnai dar neveikia
(faktiškai iš vienos subrutinos reikia grąžinti ne masyvą, o nuorodą į
masyvą, bet tam reiktų keist nemažai kodo ;)

Pats didžiausias pokytis turbūt yra šioks toks BBCode įvedimas į
komentarus. Sakau „šioks toks“, nes nežinau ar jis stabiliai
veikia. Turėtų URL’us automatiškai parodyt su linkais (nieko nereik
daryt, viskas turėtų automagiškai, jei URL prasideda
http://). Taip pat yra dabar <b>, <i> ir
<u> žymės atpažįstamos ir pakeičiamos (nežinau, jeigu jos
neuždarytos, ar blogą HTML pakišat tai gali būti visokių nesąmonių, nes
per daug netestavau). Dar pagalvojau, kad gali kam nors prireikti
komentare rašyti taip kad būtent matytųsi <b>, o ne užboldintas
tekstas, tad jei kurioje komentaro dalyje norisi išjungti šitą magiją,
galima tekstą įdėti į žymes <nohtml>...</nohtml>

Kodėl BBCode žymėms pasirinkau paprastą HTML, o ne [], kaip visur
kitur? Nes taip lengviau. Ir mano nuomone intuityviau. Bei Perlmonks.org taip daro :)

Gresia svetainės perrašymas

Dar savaitę kitą būsiu tikrai užimtas visokiais darbais (dėl to ir
IRC nesirodau.. nors šiaip tai manau, kad tiek išsigydžiau šią ligą, jog
net nebesinori ten būti. Turbūt vėl tapau normaliu eiliniu piliečiu
ignoruojančiu IRC), bet kai atrasiu laiko reikės stipriai prisėsti prie
šito dienoraščio kodo sutvarkymo. Pagrindinė problema yra ta, kad jis
tapo ganėtinai smagia kodo koše, kurioje net parseris gali dantis
išsilaužti (patarimas ateičiai – use CGI::Application). Visą
svetainės kodą esu sugrūdęs į vieną bylą, kas nėra taip jau blogai, tik
kai tas pats kodas atsakingas ir už RSS, ir už archyvą, ir už
komentarus, ir už ką tik nori, tai gaunasi ne ką blogesnis chaosas už
tą, kuris vyravo prieš dievui sukuriant žemę.

Šitos išvados priėjau tada, kai nutariau jog reikia pažiūrėti, kodėl
vieną dieną ėmė ir pradėjo nebeveikt apsauga nuo dvigubo komentarų
siuntimo kai daromas „refresh“. Pasirodo, jog tai išspręst
įmanoma, bet sprendimas turbūt blogesnis už pačią problemą, nes įves dar
daugiau sumaišties į kodą. Kad bent aš žinočiau kada pradėjo tiksliai
viskas nebeveikt (patarimas ateičiai – use CVS)… Todėl geresnis
sprendimas būtų viską perrašyt. Gražiai, objektiškai, apgalvotai.

Pastaruoju metu gaunu nemažai prašymų (na, kokius visus du ;)
elektroniniu paštu apie tai, kad kažkas norėtų šitą kodą naudotis savo
svetainėje, bet jie nemoka jo pasileisti. Tai vat aš nepatariu kol kas
šito kodo naudot, nes jis jovalas. O kai gražiai perrašysiu, tai bus
galima pagalvot ir aipe paprastą INSTALL skriptą.

Oh, ir dėl šio jovalo nekaltinkit Perlo – jis man davė įrankius
gražiam ir apgalvotam kodui, bet aš juos ignoravau. Mea culpa.