Perl/Zmienne
Zmienne w Perlu
edytujZmienne 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: |
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
edytujTakie 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
edytujZmienne 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
edytujTablice 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
edytujTablice 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
edytujPodprogramy 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. |