Uchwyty plików

Aby móc pracować z plikami musimy dowiedzieć się czym są uchwyty plików (ang. filehandler). Uchwyt jest identyfikatorem pliku dzięki któremu możemy perlowi wskazać o jaki plik nam chodzi. Aby odróżnić nazwę uchwytu od reszty kodu przyjęło się pisanie ich nazw dużymi literami. Oto prosty program otwierający plik:

open(UCHWYT, 'nazwa_pliku');

Pewnie zastanawiasz się czym jest "open". Jest to wbudowana funkcja perla, która łączy UCHWYT z nazwa_pliku. Pozwala na otwarcie pliku. Jednak co się stanie jeśli plik nie istnieje? Program wyświetli błąd. Jednakże dobrze by było być na to przygotowanym. Tutaj z pomocą przychodzą nam operatory logiczne.

open(UCHWYT, 'nazwa_pliku') or die "Nie można otworzyć pliku: $!";

Dzięki temu jeżeli próba otwarcia zakończy się niepowodzeniem zostaniemy o tym odpowiednio poinformowani. Zmienna $! zawiera komunikat błędu.

close UCHWYT;

Jak zapewne się już domyśliłeś, funkcja close zamyka plik, a jako argument przyjmuje nazwę uchwytu.

Standardowe uchwyty

Poznałeś już standardowe wejście (STDIN) oraz wyjście (STDOUT). Istnieje jeszcze standardowe wyjście błędów zwane STDERR.

Czytanie z pliku

Aby odczytać plik, należy jego uchwyt wpisać pomiędzy tzw. operator wczytywania lini "". Np: . Plik możemy wypisać linia po linii. Użyjemy w tym celu pętli while.

open(UCHWYT, "f.txt"); while () { # zwraca prawdę dopóki nie natrafi na koniec pliku $linia = $_; # linia 3 print $linia; # i 4

close UCHWYT;

Linie 3 i 4 możemy zapisać krócej jako po prostu "print;".

Możemy także wczytać cały plik do tablicy, a potem ją wypisać. Jest to dobry sposób tylko dla niewielkich plików, ponieważ perl musi przechowywać cały plik w pamięci.

open(UCHWYT, "f.txt"); @linie = ; # czytanie do tablicy close (UCHWYT); print @linie; # drukowanie tablicy ...

Tryb odczytu

Funkcja open jeżeli nie podamy jej trybu otwarcia, domyślnie ustawi go na tryb tylko do odczytu. To samo co robiliśmy powyżej można zapisać tak:

open(UCHWYT, '<nazwa_pliku') or die "Nie można otworzyć pliku: $!";

Znak "<" mówi funkcji open aby otworzyła plik do odczytu. Między trybem a plikiem może być spacja. Tryb może być nawet jako osobny argument.

open(UCHWYT, '', 'nazwa_pliku') or die "Nie można otworzyć pliku: $!";

Tryb ">" spowoduje, iż możemy zapisywać do pliku (ale bez możliwości odczytu). Jeżeli plik nie istnieje zostanie stworzony, a jeżeli istnieje - zostanie wyzerowany (tj. jego treść ulegnie skasowaniu).

open(UCHWYT, '>>', 'nazwa_pliku') or die "Nie można otworzyć pliku: $!";

Dzięki ">>" możemy do pliku tylko dopisywać (także bez możliwości odczytu). Jeżeli plik nie istnieje zostanie stworzony.

Jak zapisać

Aby wpisać coś do pliku należy jako pierwszy argument funkcji print podać uchwyt pliku, a jako drugi treść do zapisania.

open(UCHWYT, '>', 'nazwa_pliku') or die "Nie można otworzyć pliku: $!"; print UCHWYT "przykladowa tresc"; # zapisywanie close UCHWYT;

Możemy oczywiście zapisywać do plików zawartości zmiennych.

Przykład

Oto program, który kopiuje całą treść jednego pliku i dopisuje ją do drugiego.

open(PLIK_1, ">", "plik2") or die "Nie można otworzyć pliku: $!"; while () { print PLIK_2; # dopisz do PLIK_2 linia po linii

close PLIK_1; close PLIK_2;