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; }