Se soubory se v jazyce Perl pracuje pomoci tzv. filehandles. Filehandel - logicke jmeno souboru je retezec psany velkymi pismeny napr. SOUBOR
.
Na zacatku uvedme priklad programu v jazyce Perl, ktery opise obsah souboru na obrazovku, tj. ma stejnou funkci jako prikaz cat v UNIXu.
#!/usr/local/bin/perl # # Program otevre soubor, precte, vypise obsah souboru na obrazovku a opet soubor uzavre. $file = '/etc/passwd'; # jmeno souboru je ulozeno do promenne open(INFO, $file); # otevreni souboru @lines = <INFO>; # nacteni obsahu souboru do pole close(INFO); # uzavreni souboru print @lines; # tisk pole
Funkce open otevira soubor jako vstupni (tj. pro cteni). Prvni parametr je filehandle, logicke jmeno souboru. Druhy parametr je jmeno souboru vcetne cesty. V nasem prikladu je jmeno souboru s cestou ulozeno v promenne $file
Funkce close ukonci praci se souborem.
Nektera logicka jmena souboru jsou preddefinovana a je mozne je v programu pouzit.
<STDIN> | standardnim vstup | |
<STDOUT> | standardni vystup | |
<STDERR> | standardni chybovy vystup | |
<ARGV> | soubory uvedene na prikazove radce |
perl program.pl arg1.dat arg2.dat <input1.dat >output.dat
<STDIN> | reprezentuje obsah souboru input1.dat |
<STDOUT> | reprezentuje vystup do souboru output.dat |
<STDERR> | je chybovy vystup na obrazovku |
<ARGV> | cte ze souboru arg1.dat, jakmile precte posledni zaznam pokracuje ctenim souboru arg2.dat |
open(INFO, $file); # otevreni souboru pro vstup open(INFO, ">$file"); # otevreni souboru pro vystup open(INFO, ">>$file"); # otevreni souboru pro rozsireni open(INFO, "<$file"); # otevreni souboru pro vstup
Pokud chcete zapsat do souboru, otevrete soubor pro vystup a prikaz print pouzijete s parametrem filehandle. K zapsani retezce do souboru s filehandlem INFO pouzijte prikaz:
print INFO "Radek zapsany do souboru.\n";
K otevreni standadniho vstupu (obvykle klavesnice) a standardniho vystupu (obrazovka) muzete pouzit:
open(SOUB, '-'); # Otevreni standardniho vstupu open(SOUB, '>-'); # Otevreni standardniho vystupuV prikladu uvedenem na zacatku kapitoly jsou informace cteny ze souboru. Soubor ma logicke jmeno INFO. Obsah souboru se cte jednoduse tak, ze se promenne priradi logicke jmeno souboru uzavrene ve spicatych zavorkach.
@lines = <INFO>;tedy precte soubor /etc/passwd do pole @lines.
while ($lines = <INFO>) { print $lines; }V obou zpusobech cteni je prectena radka ulozena do promenne i se znakem konce radku.
Nasledujici priklad cte data zadavana uzivatelem z klavesnice, az do zadani prazdneho retezce. Prectena data opisuje na obrazovku.
while ($_ = <STDIN>) { print; }Prikaz print implicitne pracuje s promennou $_, proto neni uveden v prikazu print parametr. Podobne i pri cteni ze souboru jsou data implicitne ukladana do promenne $_. Proto je mozne predchozi priklad zapsat zkracene:
while (<STDIN>) { print; }