Perlo skaitymo iš bylų būdai

Perlas leidžia nuskaityti duomenis iš bylų daugybe būdų, kai kurie
ganėtinai bjaurūs ir nenaudotini. Štai kad ir šis, sutinkamas
dažniausiai:

{
    local $/ = undef;
    open FH, "<$byla";
    $duomenys = <FH>;
    close FH;
}

Teigiamos pusės: visiems įprasta. Iš kart nuskaito duomenis iš bylos
nenaudojant tarpinių masyvų.

Neigiamos pusės: $duomenys negali būti leksinis
kintamasis, aprašytas su my, nes specialiai reikia
sukurti bloką tam kam lokalizuotume $/

Kitas dažnas pavyzdys:

@ARGV = ($byla);
my $duomenys = join '', <>;

Teigiama: Trumpa ir aišku. Neigiama: užteršia
@ARGV masyvą, sunku gaudyti klaidas, neefektyvu
esant didelioms byloms.

my $duomenys = `cat $byla`;

Teigiama: Labai trumpa. Labai aišku shell programuotojams.
Neigiama: Prastas saugumas – bylos pavadinime gali būti paslėptos
shell komandos. Sukuriamas naujas procesas, todėl kodo
efektyvumas mažas. Sunku gaudyti klaidas. Neportabilu.

open my $fh, '<', $byla or die $!;
read $fh, my $duomenys, -s $fh or die $!;

close $fh;

Teigiama: Lengva rast klaidas, gana trumpa, nenaudoja per daug Perlo santrumpų,
visur naudoja tik leksinius vietinius kintamuosius. Neigiama: kaip ir nėra

use Sys::Mmap;
new Mmap my $duomenys, -s $byla, $byla or die $!;

Teigiama: Labai greitas duomenų pasiekimas, nes duomenys nenuskaitomi iš bylos iki paskutinės akimirkos kai jų prisireikia.
Keičiant kintamąjį $duomenys automatiškai keičiasi ir bylos turinys (šis kintamasis „pririštas“ prie bylos). Neigiama: reikia modulio Sys::Mmap, veikia tik UNIC platformoje, sunku suprasti ne UNIX ir C programuotojams.

[Versta iš PerlDesignPatterns – pamečiau dabar nuorodą, gal darbe atknisiu :)]