Perl.


Co to jest Perl?


Perl to z założenia praktyczny, interpretowany język programowania
przeznaczony przede wszystkim do wykonywania różnych zadań systemowych m.in.
przeszukiwania plików tekstowych, pobierania z nich informacji i generowania
komunikatów na ich podstawie. świetnie nadaje się do pisania skryptów CGI.
Jego autorem jest Larry Wall
wspomagany oczywiście przez ogromną liczbę innych programistów.
Perl jest kompletny, stosunkowo łatwy w użyciu oraz wydajny, przypłacając to
może nieco elegancją. Posiada wiele cech języka C, jak również sed, awk i
sh. Programujący w w/w językach nie powinni mieć większych problemów z
opanowaniem Perla. Kompilatory Perla są bezpłatne i dostępne dla wielu
systemów operacyjnych. Większość skryptów jest przenośna.
Archiwum CPAN

zawiera wiele cennych materiałów dotyczących Perla, takich jak kompilatory,
skrypty, biblioteki.

Pierwsza linijka

Pierwsza linijka kodu w języku Perl ma specjalne znaczenie,
aczkolwiek nie jest niezbędna do działania programu.
Powinna wyglądać następująco:

#!/usr/bin/perl

ścieżka /usr/bin/perl zależy od konkretnego systemu i należy ją odpowiednio
zmodyfikować, tak aby wskazywała interpreter. Zasadniczo, podobnie jak w
zwykłych skryptach pisanych np. w sh,
linie rozpoczynające się od znaku "#" są ignorowane
przez kompilator i pozwalają na umieszczanie własnych
komentarzy wewnątrz programu.

Pierwszy program.

Oto najprostszy program w Perlu wypisujący na ekranie tekst:

#!/usr/bin/perl

print 'Hello World.';

Należy pamiętać o tym, że każdą operację oddzielamy od następnej
za pomocą średnika.

Uruchamianie programu.

Aby uruchomić nasz program, należy zapisać go w zwykłym pliku tekstowym.
Możemy użyć do tego celu jakiegokolwiek edytora. Następnie nadajemy plikowi
odpowiedni atrybut wykonywalności poleceniem: chmod u+x nazwa_pliku.
Uruchamiamy program, wywołując go z linii komend:

nazwa_programu         # jeśli znajduje się on 
                       # w katalogu na ścieżce
./nazwa_programu       # jeśli nie znajduje się 
                       # w katalogu na ścieżce, ale
                       # jest w katalogu bieżącym
perl nazwa_programu    # podając go jako parametr 
                       # dla interpretera
                       # (w tym przypadku atrybut 
                       # wykonywalności pliku 
                       # nie musi być ustawiony)

Istnieje jeszcze inny, czasem przydatny sposób uruchamiania programów.
Opcja interpretera -e może być użyta do wprowadzenia pojedynczej linii skryptu,
np. perl -e "print 'Hello World.';". Możliwe jest wielokrotne użycie opcji
-e i budowanie w ten sposób skryptu o wielu liniach,
np. perl -e "print 'Hello World. ';" -e "print 'Hello once again.'".

Aby sprawdzić poprawność składni jakiegoś programu, ale nie uruchamiać go,
należy interpreter wywołać z opcją -c.

Inną pomocną i stosunkowo nową w języku opcją interpretera jest -w.
Powoduje ona wypisanie komunikatów dotyczących aktualnie wykonywanego
skryptu. Często dzięki niej możemy odnaleść usterki niezauważone w procesie
kompilacji, a mimo to istotne dla działania programu.


Zmienne i tablice zmiennych.


Zmienne.


W Perlu korzystanie ze zmiennych zostało maksymalnie uproszczone.
Nie trzeba ich tu w żaden specjalny sposób deklarować. Do wszelkich zmiennych
skalarnych odwołujemy się, umieszczając przed ich nazwę znak dolara.
Przypisanie zmiennej $a wartości liczbowej 123 będzie miało postać:

$a = 123;

Aby przypisać zmiennej odpowiedniś wartość łańcuchową,
napiszemy pamiętając o apostrofach:

$a = 'xxx';

Wypisywaliśmy już zwykły tekst. Teraz dowiemy się, jak to zrobić ze zmiennymi.
Duże znaczenie mają użyte apostrofy.

$a = 'jeden';
$b = 'dwa';
$c = 'trzy';

print $a.' - '.$b.' - '.$c;#wypisze: jeden - dwa - trzy
print '$a - $b - $c';      #wypisze: $a - $b - $c
print "$a - $b - $c";      #wypisze: jeden - dwa - trzy

Tekst zawarty w pojedynczym apostrofie jest traktowany jak zwykły ciąg
znaków.
Tekst zawarty w podwójnym apostrofie może zawierać nazwy zmiennych,
które zostaną podmienione na ich wartości, jak również specjalne znaki, np.
\t (tabulator), \n (nowa linia).

Kompilator rozróżnia wielkie i małe litery ($A to nie to samo co $a).

Nazwy zmiennych dobierane są dowolnie. Mogą nimi być dowolne kobinacje liter
i cyfr (poza kilkoma wyjątkami, np. $_) o nieograniczonej długości.

Tablice zmiennych.


Szerokie zastosowanie w programowaniu znajdują z pewnością tablice
zmiennych. Duża wygoda ich użycia w Perlu wynika m.in. z tego, że nie
posiadają one określonych rozmiarów, rosną w miarę potrzeb. Aby stworzyć
tablicę i zapisać w niej wartości, napiszemy:

@imiona = ("kazik", "tomek", "marek");

Z tak przygotowanej tablicy możemy pobierać poszczególne elementy,
a także je zapisywać. Należy pamiętać, że pola tablicy są numerowane
począwszy od zera.

$imiona[0]    # tak przedstawiany jest pierwszy 
                      # element tablicy
$imiona[1] = 'zyzio'; # tak zapisujemy do drugiego
                      # pola tablicy

Każdy element tablicy to zwykła zmienna skalarna, dlatego w celu odwołania
się do niej używamy znaku dolara, a nie "małpki".

W ten sposób dodajemy do tablicy nowe elementy:

push(@imiona, "kasia");# dodanie kolejnego (czwartego)
                      # elementu do tablicy @imiona
push(@imiona, "kasia", "małgosia")   
                      # dodanie dwóch nowych 
                      # elementów na raz
@damy = ("kasia", "małgosia");
push(@imiona, @damy); # dodanie dwóch tablic do siebie

Tak usuwamy ostatni element tablicy i jednocześnie go zwracamy:

$a = pop(@imiona); # $a będzie zawierać wartość 
                   # ostatniego, usuniętego 
                   # elementu tablicy @imiona

Możliwe jest przyporządkowywanie zmiennym skalarnym tablic.
Znowu należy zwrócić uwagę na użycie apostrofów.

$a = @imiona; # zmienna $a będzie zawierać liczbę
             # elementów tablicy
$a = "@imiona"; # zmienna $a będzie łańcuchem 
          # składającym się z kolejnych elementów
          #  tablicy @imiona odzielonych spacjami

Numer ostatniego elementu tablicy otrzymujemy dzięki zastosowaniu zapisu:

$#imiona

Możliwe jest ustalanie spodziewanych wielkości tablic przez przypisywanie
odpowiednich wartości powyższej zmiennej. Ma to na celu przyspieszenie
działania programu.

Pozostała jeszcze kwestia wypisywania zawartości tablic:

print @imiona;          # wypisuje elementy tablicy
                        #  jednym ciągiem
print "@imiona";    # wypisuje elementy, 
                    # oddziela je od siebie spacjami
print @imiona."";   # wypisuje ilość elementów tablicy

Tablica @ARGV.


W specjalnej tablicy o nazwie @ARGV zapisane są wszystkie opcje podane w
linii komend przy starcie programu. Aby wypisać pierwszą opcję, napiszemy:

print("$ARGV[0]");


Następujący program zakończy swe działanie odpowiednim komunikatem,
jeśli okaże się, iż został wywołany z jakimikolwiek parametrami:

if (@ARGV)
{
  print "Program został wywołany z parametrami!\n";
}

Tablice asocjacyjne.


Poza przedstawionymi już zwykłymi tablicami istnieją jeszcze tablice asocjacyjne.
Zasadniczą różnicą między tablicą a tablicą asocjacyjną jest
sposób odwoływania się do poszczególnych ich elementów: w zwykłej tablicy
? każdemu elementowi odpowiadała liczba, podczas gdy w tablicach asocjacyjnych
każdemu elementowi będzie przyporządkowany łańcuch. W odróżnieniu od
zwykłych tablic przed nazwami tablic asocjacyjnych stawiamy znak procenta.
Przykładowo stworzymy tablicę asocjacyjną zawierającą liczby oznaczające
wiek danych osób:

%wiek = ("kazik", 17,
         "tomek", 20,
         "marek", 31);

Aby odczytać interesującą nas informacje z wcześniej przygotowanej tablicy
asocjacyjnej, napiszemy:

$wiek{"marek"}  # to wyrażenie zwróci wartość 31

Ponieważ w polach tablicy asocjacyjnej zapisane są zmienne skalarne, do ich
odczytu używamy znaku dolara.

Możliwe jest konwertowanie zwykłych tablic do tablic asocjacyjnych i na odwrót:

@tab = %wiek;           # od tej chwili @tab =
                        #  ("marek", "31", "tomek",
                        # "20", "kazik", "17");
%nowa = @tab       # od tej chwili %nowa jest taką samą 
                   # tablicą jak %wiek

Tablica asocjacyjna %ENV.


Program wykonywany w systemie UN*X może odwoływać się do zmiennych
środowiskowych, które często zawierają przydatne informacje. (Aby dowiedzieć
się o aktualnie ustalonych zmiennych środowiskowych, należy wydać polecenie:
set). Perl standardowo udostępnia nam cały zestaw tych zmiennych. Są one
umieszczone w tablicy asocjacyjnej o nazwie %ENV.

print "Ty jesteś $ENV{'USER'}, witam!";
        # zmienna środowiskowa USER zawiera
        # aktualną nazwę użytkownika