Kas naudoja Perl?

Taip pat skaitykite Perl pamokos: CGI.pm biblioteka: sausainiai

Kadangi Perl turi funkcijas, leidžiančias lengvai manipuliuoti su procesais ir failais, o taip pat yra „pernešamas“ (portable, t.y. gali veikti daugelyje skirtingų platformų), jis yra ypač populiarus tarp sistemų administratorių, prižiūrinčių po kelias skirtingo tipo sistemas. O interneto plėtra leido Perl tapti populiaria Perl icon dinaminių Web puslapių kūrimo priemone CGI skriptams. Net šiandien, atėjus į tai orientuotoms kalboms (Ruby, Node JS, ASP.net, …), Perl išlaikė populiarumą tarp sistemų ir DB administratorių, mokslininkų ir visų, kurie renka duomenis į failus ir nori jais manipuliuoti. Jis gerokai greitesnis už Unix apvalkalo skriptus, o Perl 5 įtraukė objektinio programavimo galimybes.

Perl kalbą lengviau išmokti, jei esate susipažinęs su programavimu Unix apvalkalo (shell) aplinkoje arba iš C išvestomis kalbomis (pvz., Java). Sunkiau neturintiems programavimo patirties, tačiau išmokus Perl nebus priežasties mokytis ką nors kita.

Oficiali Perl svetainė yra www.perl.com, iš kur galite atsisiųsti reikiamas priemones ir instaliuoti. Puikus pasirinkimas yra ActivePerl. Gausų dokumentacijos kiekį rasite www.perl.org/learn.html
Jei norite sužinoti, kaip veikia bibliotekos modulis, dokumentaciją apie tai galite gauti naudodami perldoc komandą, pvz., jei norite sužinoti apie Moose modulį, vykdykite:
perldoc Moose
o norėdami sužinoti apie konkrečią Perl funkciją, naudokite perldoc -f, pvz.,
perldoc -f length

O dabar pradėkime mokytis!

Pirmiausia, kaip sužinoti, kokia Perl versija naudojama? Tam vydykite komandą
perl -v

Pirmoji programa, aišku, bus „Labas, pasauli!” programa:

print "Labas, pasauli!\n";

Ją galite surinkti tiesiog įvykdę perl komandą (naudokite ^Z programos pabaigos pažymėjimui”, arba užrašykite ją į tekstinį failą (pvz., labas.pl) ir jį vykdykite:
perl labas.pl

Programa pateiks atsakymą:
Labas, pasauli!

Trečias būdas - įvykdyti programą ją nurodžius su „-e“ raktu, pvz.,
perl -e "print 'Labas, pasauli!';"

Perl yra laisvos struktūros kalba (t.y., sakiniai gali prasidėti bet kur, o kalbos elementus skirti bet koks kiekis tarpų), kurioje sakinius skiria kabliataškis (;), - tiesa, tarpai ir perėjimai į naujas eilutes išsaugojami, kai yra tarp eilučių. Komentarai prasideda „grotelėmis“ (#). Kalboje yra trijų tipų kintamieji: skalariniai (vienos reikšmės), masyvai ir indeksai (hash). Joje nėra loginio (boolean tipo, tačiau reikšmių palyginimai elgiasi taip, tarsi jis būtų. Perl kalboje kintamųjų nereikia aprašinėti iš anksto – jų aprašas yra pirmas panaudojimas. Kintamojo vardas prasideda dolerio ženklu ($, sigil), po kurio seka lotyniškų raidžių, skaitmenų ir pabraukimų seka. Didžiosios ir mažosios raidės laikomos skirtingomis. Pvz.,

$vardas = "Jonas";
$kiek = 20;
$daiktas = " eurų.\n";
print $vardas, " turi ", $kiek, $daiktas;

duos atsakymą:
Jonas turi 20 eurų.

Perl programa paprastai prasideda #!, po kurių seka kelias iki Perl interpretatoriaus (pvz. #!/usr/bin/perl arba #!/usr/bin/env perl) - tai vadinamoji shebang eilutė. Ji nurodo, kurį Perl interpretatorių naudoti (ypač svarbu, kai jų yra keli). Tada, jei programos failui yra priskirtas vykdymo atributas (pvz., Unix sistemoje su komanda chmod +x pvz.pl), programą galima įvykdyti tiesiog nurodant jos vardą, pvz.,
./pvz.pl

Teksto eilutės yra simbolių seka tarp kabučių (") arba apostrofų ('). Skaičiai gali būti sveiki (pvz., 54321) arba slankiu kableliu (pvz., 56.99 arba .25). Taip pat galima skaičius nurodyti su skirtingais skaičiavimo pagrindais: dvejetainiu (pvz., 0b1001), aštuontainiu (pvz., 0777), šešioliktainiu (pvz., 0x1f), o taip pat „moksline“ notacija (pvz., .7E-8).

Pvz.,

#!/usr/bin/perl      # paleidimo (shebang) eilutė

# Skaičių skirtingo panaudojimo pavyzdžiai print 'Yra ', 0b10, ' žmonių tipai: a) kurie supranta dvejetainius skaičius ir b) kurie jų nesupranta.\n'; print "Ketvirtis yra ", .25, ", o prekė kainuoja tris ketvirčius.\n"; printf "%13.11f - labai mažas skaičius.\n", 1.23E-9; # Tai mokslinės skaičiaus notacijos pavyzdys # Pastaba: printf yra naudojama teksto formatavimui nurodyti

Tai pateiks rezultatą:

Yra 2 žmonių tipai: a) kurie supranta dvejetainius skaičius ir b) kurie jų nesupranta.
Ketvirtis yra 0.25, o prekė kainuoja tris ketvirčius.
0.00000000123 - labai mažas skaičius.

Masyvo pavyzdys ir indekso pavyzdys:

#!/usr/bin/perl      
@spalvos = ("balta", "juoda", "raudona");
$balta = $spalvos[0];

%goods = ("Pavadinimas" => "Knyga", "Kaina" => 17.95, "Nuolaida" => .50); $nuolaida = $goods{ "Nuolaida" };

print "Spalva: ", $balta, ", nuolaida: ", $nuolaida;

Gausim rezultatą:
Spalva: balta, nuolaida: 0.5

Kontekstas

Perl kalboje yra funkcijų, kurios veikia priklausomai nuo jų panaudojimo, kuris vadinamas „kontekstu“. Tarkim, gali būti skaitinis ar teksto eilučių kontekstas, priklausomai nuo naudojamo operatoriaus. Taip, jei naudojamas "+", Perl tikisi skaitinių reikšmių, kai yra 12+7, tad jei nurodysime tekstų eilutes iš skaitmenų (pvz., "55"+"44"), bus atlikta sudėtis (ir rezultatas bus 99). Tad pabandžius atlikti veiksmą "5lygios"+"dalys", pirmas operandas turi pradedantį skaitmenį ir jo reikšmė bus "5", o antrasis neturi skaitmenų, todėl jis prilyginamas "0", - ir bus atliktas veiksmas 5+0 gaunant 5. Tuo tarpu eilučių sujungimui skirtas operatorius "." (taškas), tad jis "55"."44" duos rezultatą "5544".

Funkcijų panaudojimas

Standartinės Perl funkcijos prasideda mažąja raide. Anksčiau jau naudojome print komandą. Štai kvadratinės šaknies funkcijos panaudojimas:
$n = sqrt 25;


Realus pavyzdys: Ilgų eilučių „laužymas“

Kartais tekstiniame faile eilutės yra labai ilgos, pvz., visa pastraipa yra išsaugota kaip viena eilutė. Tokį tekstą sunkiau skaityti, tad natūralus noras jo eilutes matyti trumpesnėmis. Nors yra tam skirtų priemonių, tačiau ne visada tinkama programa yra po ranka, o kartais jos yra komercinės ir nepigios, tad paprastam ir greitam sprendimui „Perl“ kalboje buvo sukurta linebreak.pl programa, kuri nuskaito pradinį tekstą ir visas jo eilutes suskaido į trumpesnes pagal nurodytus parametrus.

Čia pristatoma supaprastinta tos programos versija (vadinamoji demo). Pilną naujausią (production) versiją galite pasiimti iš „Lietuviškos programos VELTUI“ skilties - paketą lb_perl.zip

Ši programa priima failo, kurio eilutes norima suskaidyti, vardą, o taip pat galima nurodyti du (būtinus) parametrus - minimalų paliekamos eilutės ilgį ir maksimalų paliekamos eilutės ilgį. Programa, pasiekusi minimalų nurodytą ilgį bando rasti esamo žodžio pabaigą ir „skelia“ ties jo pabaiga, jei tik neišeina už maksimalaus eilutės ilgio (šiuo atveju skelia ties ta pozicija).

Programoje panaudojama funkcija splitline - parametrais paimamti vieną teksto eilutę ir minimalų bei maksimalų eilutės ilgį ir tą eilutę „sulaužanti“ į trumpesnes eilutes pagal nurodytus parametrus. Pati programa sudaryta tik iš failo nuskaitymo ir šios funkcijos kvietimo cikle kiekvienai teksto eilutei.

Tad žemiau pateiktą kodą įrašę į linebreak.pl failą, programą galima vykdyti, pvz., taip:
perl linebreak text.txt 64 80  - skaidys text.txt failo eilutes su nurodytais ilgiais (64 ir 80);

#!/usr/bin/perl
if ($#ARGV != 2) {
    print "To break long lines in text (v.1.0 demo, 2024).\n\nFormat: linebreak file_name start_position max_length\n";
    exit 1;
} 

$DATFILE = $ARGV[0];
$START_POS = $ARGV[1];
$MAX_LENGTH = $ARGV[2];

open (IN, "<$DATFILE") or die "$ERROR_PREFIX can't open $DATFILE: $!";
@lines = ;
close (IN);

if ($#lines < 0) {
   exit;
}

for ($nr = 0; $nr <= $#lines; $nr++ ) {
   $broken = &splitline($lines[$nr], $START_POS, $MAX_LENGTH);
   print  $broken;
}

sub splitline {
   local ($line) = $_[0];
   local ($start_pos) = $_[1];
   local ($threshold) =  $_[2]-$_[1];
   local ($performed);

   while (length($line) > $start_pos && length($line) != 0) {
       $performed .= substr($line, 0, $start_pos);
       $line = substr($line, $start_pos);
       for ($pos = 0; $pos < $threshold; $pos++) {
          $sy = substr($line, 0, 1); 
          if ( $sy eq ' ' || $sy eq "\t" || $sy eq "\n") {
             $line = substr($line, 1);
             last;
          } else {
            $performed .= $sy;
            $line = substr($line, 1);
          }
       }
       $performed.= "\n";
   }
   $performed .= $line;
   return $performed;
}

Pastaba: Pilnas (ir lankstesnis su daugiau parametrų) šios linebreak.pl variantas (su licencija, aprašais (LT ir EN) bei pilnu programos kodu) yra „Lietuviškos programos VELTUI“ skiltyje - kaip lb_awk.zip paketas.
Beje ten pat yra ir linebreak programos atmaina AWK kalba (apie ją skaitykite čia) - kaip lb_awk.zip paketas.


Pastaba: Vėliau šis įvadas į Perl kalbą bus praplėstas...

Ankstesnės "Advanced HTML" skyrelio temos:
Tcl kalba
Ruby on Rails
Ateities kalbos?
JavaScript pradmenys
Unix komandinė eilutė
Džonas Bakas – FORTRAN tėvas
Pitonas, kandantis sau uodegą
AWK kalba - sena ir nuolat aktuali
Perl pamokos: CGI.pm biblioteka: sausainiai
Kaip valdyti piešinių pakrovimo tvarką
Lambda išraiškos – Java į naują lygį
CGI.pm biblioteka: sausainiai
Programavimo kalbų istorija
Dygios JavaScript eilutės
Didžiųjų duomenų mitas
Įlįskite į lankytojų kailį
Papildytoji tikrovė

Sveikųjų skaičių žaidimai
Pelė uodega švystelėjo...
Anotacijos Java kalboje
Programavimo kalbų klegesys
Pirmasis „Java“ įskiepis Lietuvoje
Pirmoji programuotoja: Ada Lovelace
Java 8: Optional prieš null
JavaScript atspindžiai
Kompiuterių ištakos
Tiesiog - Java
Vartiklis