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 :)]