Perl - Obsługa plików
Każdy plik przed zapisem lub odczytem należy otworzyć, a po zakończeniu operacji na nim - zamknąć. Do otwarcia jakiegokolwiek pliku w języku Perl służy rozbudowana funkcja open, zaś do zamknięcia - close. Nie ma żadnych limitów ilości otwieranych plików w Perlu poza zewnętrznymi, systemowymi. Schemat obsługi pliku jest prosty:
open(DANE, ścieżka_do_pliku); # otwarcie pliku # (DANE to # przykładowa # nazwa) [ ... ] # operacje na # nim close(DANE); # zamknięcie # pliku
Plik jednakże może zostać otwarty na kilka sposobów:
open(DANE, ścieżka_do_pliku); # dwa sposoby # otwarcia open(DANE, "<ścieżka_do_pliku"); # pliku # do odczytu open(DANE, ">ścieżka_do_pliku"); # otwarcie # pliku do # zapisu open(DANE, ">>ścieżka_do_pliku"); # otwarcie # pliku do # dopisywania
Często przydatną rolę w lokalizacji plików na dysku pełnią rozszerzenia sh. Można z nich skorzystać, kiedy ujmiemy ścieżkę do pliku w odpowiednie nawiasy. Na przykład chcąc otworzyć plik znajdujący się w katalogu domowym użytkownika, napiszemy:
open(DANE, <~/plik.txt>);
Najprostszym przypadkiem wyprowadzania danych z pliku będzie wczytanie do tablicy całej zawartości pliku tekstowego:
open(F, '/etc/passwd'); # otwarcie pliku do # odczytu @tekst = <F>; # zapisanie tekstu # z pliku w tablicy # (każda linia # zostaje # umieszczona z # osobna, w jednym # polu tablicy) close(F); # zamknięcie pliku
A tak zapisujemy dane do pliku:
open(DANE, '>dane.txt'); # otwarcie pliku # do zapisu print DANE "Tekst zapisywany do pliku.n"; # zapisanie tekstu # do pliku close(DANE); # zamknięcie pliku
Za pomocą funkcji open możemy także otwierać i zamykać standardowe wejście (najczęściej klawiatura) i wyjście (najczęściej ekran).
open(DANE, '-'); # otwarcie # standardowego # wejścia open(DANE, '>-'); # otwarcie # standardowego # wyjścia
Funkcja open może także zostać użyta do otwierania strumieni w środowiskach wieloprocesowych. W poniższym przykładzie posortujemy kilka łańcuchów przy użyciu zewnętrznej komendy sort:
open(SORT, "|sort"); # otwarcie strumienia print SORT ("dn", "zn", "an"); close SORT;