Poprzedni rozdział: Liczby
Następny rozdział: Operatory


Zmienne w Perlu

edytuj

Zmienne pozwalają przechowywać potrzebne programowi dane. Każda zmienna ma swoją nazwę, dzięki czemu możemy łatwo się do niej odnosić. W Perlu użycie zmiennych wygląda następująco:

 $liczba = 5;
 print $liczba;

Uruchomiony program wypisze na ekranie:

 5

Nazwa każdej zmiennej w Perlu musi być poprzedzona znakiem zaznaczającym jej typ. W przeciwieństwie do tzw. języków programowania o silnej typizacji dla Perla nie ma większego znaczenia, czy zmienna jest napisem, liczbą całkowitą czy ułamkiem. Rodzaje zmiennych są zupełnie inne.

W Perlu występuje tylko 5 typów zmiennych : $skalarne, @tablice, %hasze, &podprogramy oraz *zmienne globalne.

W przykładzie możemy poznać, że $liczba to zmienna skalarna, gdyż jej nazwę poprzedza znak dolara.

Spróbuj

Poeksperymentuj z przykładowym programem, podstawiając pod zmienną $liczba różne wartości (liczby, napisy itp.). Jak myślisz, co się stanie, gdy przed instrukcję print wstawimy linijkę $liczba = $liczba + 10?

Jeśli masz doświadczenie z tradycyjnymi językami programowania, zapewne zastanawiasz się, w jaki sposób w Perlu tworzy się zmienne.

Zapamiętaj:
Perl domyślnie tworzy zmienną w momencie, gdy po raz pierwszy na nią się natknie.

Fakt ten może być szokujący dla programistów, którzy mieli wcześniej doświadczenie z językami typu C czy Pascal, które ściśle przestrzegają wymogu zadeklarowania zmiennej przed jej użyciem. Perl jest językiem interpretowanym i jego interpreter sam zarządza pamięcią, w której działa program. W przeciwieństwie do języków kompilowanych, Perl nie jest zdezorientowany, gdy napotyka zmienną, o której do tej pory nie wiedział - w takim wypadku po prostu ją tworzy.

Wymuszenie deklarowania zmiennych

edytuj

Takie działanie może być potencjalną przyczyną błędów. Załóżmy, że w naszym programie popełniliśmy literówkę:

 $liczba = 5;
 print $licba + 10;

W efekcie nasz program wydrukuje:

 10

Nie tego oczekiwaliśmy, prawda? Przyczyną tego zachowania jest nasz błąd w pisowni nazwy zmiennej - kompilator nie znalazł zmiennej $licba więc stworzył nową, o wartości zero. Wymóg deklarowania zmiennych w językach kompilowanych typu C ma tę zaletę, że informuje o błędzie przy tego typu pomyłkach. W Perlu wygoda używania zmiennych może też być pułapką w przypadku większych programów. Możemy się jednak z tym uporać. Dodanie do programu linijki:

 use strict 'vars';

Linijka ta mówi interpreterowi Perla, by odmawiał korzystania ze zmiennych, które nie były zadeklarowane. Po użyciu tej dyrektywy będziemy musieli w całym programie deklarować zmienne. Można to robić używając polecenia my:

 my $liczba = 5;

Domyślnie zmienne w Perlu są globalne. my powoduje, że zmienna staje się lokalna. Więcej na ten temat wyjaśnione jest w następnych rozdziałach.

Zwykłe zmienne

edytuj

Zmienne skalarne określa się poprzez użycie $, mogą zawierać prawie dowolne typy danych. Na przykład:

$zmienna = 3;                              # liczby całkowite
$zmienna = 3.1415926;                      # zmiennoprzecinkowe
$zmienna = 3.402823669209384634633e+38;    # liczby w zapisie wykładniczym
$zmienna = $inna_zmienna + 1;              # wyliczane
$zmienna = 'Moge zawierac tekst';          # tekstowe
$zmienna = \$OdwolanieDoInnejZmiennej;     # referencje - odwołujące się do innej zmiennej
$zmienna = \@OdwolanieDoTablicy;           # referencje do tablic - odwołujące się do tablic

Wartość każdej z tych zmiennych wypiszemy poleceniem:

print $zmienna;

Tablice

edytuj

Tablice dla odróżnienia od innych zmiennych oznacza się znakiem @.

@tablica = (1,2,3,4,5,6,7,8,9,10);                # tablica liczb
@tablica = (1..10);                               # zakres
@tablica = qw/1 2 3 4 5 6 7 8 9 10/;              # inny sposób
@tablica = split(/,/, "1,2,3,4,5,6,7,8,9,10");    # tablica powstała z dzielenia napisu
@tablica = qw/czerwony niebieski zielony/;        # lista napisów
@tablica = qw/czerwony niebieski 1 zielony 5/;    # tablica mieszanego typu
@tablica = qw/\@tablica1 \@tablica2 \@tablica3/;  # tablica tablic

Poniższy fragment kodu wypisze wartości dowolnej z poprzednich tablic:

 foreach $element (@tablica) {
 print "Nastepnym elementem jest $element\n"
 }

W przypadku gdy działasz na pojedynczym elemencie tablicy (posługując się nawiasami kwadratowymi, aby uniknąć zamieszania), element ten jest uznawany za skalar i poprzedza się go znakiem $ tak jak przy innych zmiennych skalarnych.

$tablica[0] = 1;

Pierwszy element w tablicy ma numer 0 (chociaż to, jak i wiele innych rzeczy w Perlu może być zmienione). Jako indeks (numer elementu) tablicy może być użyta wartość zmiennej:

$tablica[$numer] = 1;

Tablice asocjacyjne

edytuj

Tablice asocjacyjne (ang. associative arrays) nazywane w Perlu haszami (ang. hash) są oznaczane znakiem %. Hasz przechowuje pary klucz-wartość (ang. key-value), gdzie klucz i wartość mogą być zmiennymi dowolnego typu. Hasze możemy traktować jako tablice, które nie są numerowane, tylko jako indeksu używa się np. łańcuchów znakowych.

%hasz = ('klucz1' => 'wartosc1', 'klucz2' => 'wartosc2'); # klucz i wartość zwyczajowo rozdzielamy strzałką
%hasz = ('jeden', 1, 'dziesiec', 10, 'sto', 100);         # ale można to tez robić przecinkiem

Jeśli używamy strzałki => lewa strona powinna być umieszczona w cudzysłowach. Dla długich list jest dobrze umieszczać kolejne pary w osobnych liniach:

%hasz = (
    'klucz1'    => 'wartosc1',
    'klucz2'    => 'wartosc2',
    'klucz3'    => 'wartosc3',
);

Do pojedynczego elementu odnosimy się używając nawiasów klamrowych, element ten jest wtedy uznawany za skalar i przyjmuje identyfikator $:

$hasz{'klucz1'} = 'wartosc1';
 print $hasz{'klucz1'};

Podprogramy

edytuj

Podprogramy są zdefiniowane przez słowo kluczowe sub i mogą być wywoływane używając &, chociaż nie jest to zalecane. Poniższy podprogram liczy wartości ciągu Fibonacciego:

sub fib {
    my $n = shift;
    return $n if $n < 2;
    return fib( $n - 1 ) + fib( $n - 2 );
}

print fib(14);

Szczegółowe omówienie wyżej wymienionych typów zmiennych pojawi się w podrozdziale Typy danych, natomiast podprogramów w podrozdziale Funkcje.


Poprzedni rozdział: Liczby
Następny rozdział: Operatory