Se soubory se v jazyce Perl pracuje pomocφ tzv. filehandles. Filehandel - logickΘ jmΘno souboru je °et∞zec psan² velk²mi pφsmeny nap°. SOUBOR
.
Na zaΦßtku uve∩me p°φklad programu v jazyce Perl, kter² opφÜe obsah souboru na obrazovku, tj. mß stejnou funkci jako p°φkaz cat v UNIXu.
#!/usr/local/bin/perl # # Program otev°e soubor, p°eΦte, vypφÜe obsah souboru na obrazovku a op∞t soubor uzav°e. $file = '/etc/passwd'; # jmΘno souboru je ulo₧eno do prom∞nnΘ open(INFO, $file); # otev°enφ souboru @lines = <INFO>; # naΦtenφ obsahu souboru do pole close(INFO); # uzav°enφ souboru print @lines; # tisk pole
Funkce open otevφrß soubor jako vstupnφ (tj. pro Φtenφ). Prvnφ parametr je filehandle, logickΘ jmΘno souboru. Druh² parametr je jmΘno souboru vΦetn∞ cesty. V naÜem p°φkladu je jmΘno souboru s cestou ulo₧eno v prom∞nnΘ $file
Funkce close ukonΦφ prßci se souborem.
N∞kterß logickß jmΘna soubor∙ jsou p°eddefinovanß a je mo₧nΘ je v programu pou₧φt.
<STDIN> | standardnφm vstup | |
<STDOUT> | standardnφ v²stup | |
<STDERR> | standardnφ chybov² v²stup | |
<ARGV> | soubory uvedenΘ na p°φkazovΘ °ßdce |
perl program.pl arg1.dat arg2.dat <input1.dat >output.dat
<STDIN> | reprezentuje obsah souboru input1.dat |
<STDOUT> | reprezentuje v²stup do souboru output.dat |
<STDERR> | je chybov² v²stup na obrazovku |
<ARGV> | Φte ze souboru arg1.dat, jakmile p°eΦte poslednφ zßznam pokraΦuje Φtenφm souboru arg2.dat |
open(INFO, $file); # otev°enφ souboru pro vstup open(INFO, ">$file"); # otev°enφ souboru pro v²stup open(INFO, ">>$file"); # otev°enφ souboru pro rozÜφ°enφ open(INFO, "<$file"); # otev°enφ souboru pro vstup
Pokud chcete zapsat do souboru, otev°ete soubor pro v²stup a p°φkaz print pou₧ijete s parametrem filehandle. K zapsßnφ °et∞zce do souboru s filehandlem INFO pou₧ijte p°φkaz:
print INFO "╪ßdek zapsan² do souboru.\n";
K otev°enφ standadnφho vstupu (obvykle klßvesnice) a standardnφho v²stupu (obrazovka) m∙₧ete pou₧φt:
open(SOUB, '-'); # Otev°enφ standardnφho vstupu open(SOUB, '>-'); # Otev°enφ standardnφho v²stupuV p°φkladu uvedenΘm na zaΦßtku kapitoly jsou informace Φteny ze souboru. Soubor mß logickΘ jmΘno INFO. Obsah souboru se Φte jednoduÜe tak, ₧e se prom∞nnΘ p°i°adφ logickΘ jmΘno souboru uzav°enΘ ve ÜpiΦat²ch zßvorkßch.
@lines = <INFO>;tedy p°eΦte soubor /etc/passwd do pole @lines.
while ($lines = <INFO>) { print $lines; }V obou zp∙sobech Φtenφ je p°eΦtenß °ßdka ulo₧ena do prom∞nnΘ i se znakem konce °ßdku.
Nßsledujφcφ p°φklad Φte data zadßvanß u₧ivatelem z klßvesnice, a₧ do zadßnφ prßzdnΘho °et∞zce. P°eΦtenß data opisuje na obrazovku.
while ($_ = <STDIN>) { print; }P°φkaz print implicitn∞ pracuje s prom∞nnou $_, proto nenφ uveden v p°φkazu print parametr. Podobn∞ i p°i Φtenφ ze souboru jsou data implicitn∞ uklßdßna do prom∞nnΘ $_. Proto je mo₧nΘ p°edchozφ p°φklad zapsat zkrßcen∞:
while (<STDIN>) { print; }