Dar vieno analitiko svetainė

Petras Kudaras

Įvadas į Perl: trečioji dalis: operatoriai ir I/O

Operatoriai ir funkcijos

Perlas turi daug standartinių funkcijų. kai kurias jau matėme šiame įvade (tokias kaip print, sort arba reverse). Pilnas funkcijų sąrašas yra perlfunc dokumentacijoje ir apie kurią nors funkciją lengva pasiskaityti konsolėje įvedus perldoc -f funkcijospavadinimas.

Perlo operatoriai pilnai aprašyti perlop dokumentacijoje. Štai keletas dažniau sutinkamų:

Aritmetiniai:

+   sudėtis
-   atimtis
*   daugyba
/   dalyba

Matematinio palyginimo:

==   lygybės
!=   nelygybės
<    mažiau negu
>    daugiau negu
<=   mažiau arba lygu
>=   daugiau arba lygu

Simbolių eilučių palyginimo:


eq   lygybės
ne   nelygybės
lt   mažiau nei
gt   daugiau nei
le   mažiau arba lygu
ge   daugiau arba lygu

Kodėl reikia skirtingų palyginimo operatorių simbolių eilutėms ir matematinėms išraiškoms? Kadangi perlas netipizuoja kintamųjų pagal tai ar tai skaičius, ar simbolių eilutė, jam reikia nurodyti ar rikiuoti matematiškai (kur 99 yra mažiau nei 100) ar alfabetiškai (kur 100 eina prieš 99)

Loginiai operatoriai:

&&   ir
||   ar
!    ne

&&, || bei ! galima užrašyti ir and, or, not. Taip jie labiau įskaitomi, tačiau keičiasi pirmumo eilė. Plačiau apie skirtumus tarp and ir && galima rasti perlop dokumentacijoje.

Kiti operatoriai:

=     priskyrimas
.     simbolių eilučių sujungimas
x     simbolių eilučių daugyba
..    intervalo operatorius (sukuria skaičių sąrašą)

Dauguma operatorių gali būti derinami su = šitokiu būdu:

$a += 1;    # tas pats kaip $a = $a + 1;
$a -= 1;    # tas pats kaip $a = $a - 1;
$a .= "\n"; # tas pats kaip $a = $a . "\n";

Bylos ir įvestis/išvestis

Įvesčiai ar išvesčiai bylą galima atidaryti su funkcija open(). Pilnai su visomis detalėmis ji aprašyta perlfunc bei perlopentut dokumentacijoje, tačiau trumpai:

open(INFILE,  "infile.txt")    or die "Negaliu atidaryt input.txt: $!";
open(OUTFILE, ">outfile.txt")  or die "Negaliu atidaryt outfile.txt: $!";
open(LOGFILE, ">>logfile.txt") or die "Negaliu atidaryt 
logfile.txt: $!";

Skaityti iš bylos galima naudojantis <> operatorių. Skaliariniame kontekste jis nuskaito vieną eilutę iš bylos, o sąrašo kontekste grąžina iš bylos eilučių sudarytą masyvą:

my $eilute = <INFILE>;
my @eilutes = <INFILE>;

Visos bylos nuskaitymas iš karto vadinamas „šliurpimu“ (slurping). Tai gali būti naudinga, bet kartu gali ir pareikalauti daug atminties resursų. Daugumą dalykų galima padaryti tekstą apdorojant po eilutę ir naudojantis Perlo ciklais. Operatorius <> dažniausiai naudojamas tokiame while cikle:

while (<INFILE>) { # priskiria kiekvieną bylos eilutę $_
    print "Ką tik perskaičiau eilutę: $_";
}

Mes jau matėme kaip spausdinti tekstą naudojantis print(). Tačiau print() galima nurodyti pirmu argumentu į kurią bylą spausdinti:

print STDERR "Paskutinis perspėjimas\n";
print OUTFILE $irasas;
print LOGFILE $ivykis;

Kai baigiate dirbti su bylomis, jas reiktų uždaryti su funkcija close() (nors tiesą sakant,

Perlas sutvarkys viską ką pridarėte, net jei ir pamiršote uždaryti bylą)

close INFILE;