3. Typy danych
- zmienne
- wektory zmiennych
- skojarzone wektory zmiennych (hashe)
3.1. Zmienne
Zmienna jest podstawowym typem w Perlu. Zmienna może mieć wartość
całkowitą, zmiennoprzecinkową, lub znakową. Perl ustala typ zmiennej z
kontekstu. Zmienne zawsze posiadają prefiks $. Tzn.:
$str = "Hello world!";
nie zaś
str = "Hello world!";
W Perlu alfanumeryczny ciąg znaków bez prefiksu jest traktowany
literalnie. To znaczy, że powyższe przypisanie jest równoważne "str" =
"Hello world!"; Zmienne w Perlu nie musza być deklarowane. Są alokowane
dynamicznie. Można się zatem odwoływać do nieistniejącej zmiennej.
Domyślną wartością zmiennej jest, w zależności od kontekstu, 0 lub ciąg
pusty. Zmienne znakowe użyte w kontekście liczbowym są interpolowane do
ich wartości. Np.:
$x =4; # zmienna całkowita
$y = "11"; # ciąg znaków
$z = $x+$y;
print $z,"\n"; # zmienna z jest typu całkowitego i równa 15
Konwersja może zachodzić również w druga strone np.:
$answer = 42;
print "the answer is $answer";
W tym przykładzie na ekranie pojawi się : "the answer is 42". Stałe
znakowe można specyfikować przez tak zwane "tu dokumenty":
$msg = <<_EOM_;
The system is going down.
Log off now.
_EOM_
3.2. Wektory zmiennych
Perl zawiera wektory (lub listy) zmiennych. Bieżącą wartość udostępnia
prefiks at (@). Można również przypisać elementy wektora przez nazwę.
Oto kilka sposobów :
@numbers = (3,1,4,1,5,9);
@letters = ("this","is","a","test");
($word,$another_word) = ("one","two");
Można się odwoływać do poszczególnych elementów, przy czym pierwszy
element ma indeks 0:
$blah[2] = 2.718281828;
$message[12] = "core dumped\n";
Ciąg $# używa się do znalezienia ostatniego ważnego indeksu wektora, a
nie jego rozmiaru. Zaś zmienna $[ oznacza numer pierwszego elementu w
każdym wektorze. Domyślną jego wartością jest 0. Można także ustawić ją
np. na 1, jak to ma miejsce w Fortranie. Przykład programu informującego
o ilości elementów w wektorze @a :
$n = $#a - $[ + 1;
print "wektor a ma $n elementow\n";
Wektory są rozwijane dynamicznie. Wystarczy przypisać wartość zmiennej
$#, a dany wektor zostanie alokowany.
$#months = 11; # elementy 0 - 11
Perl zawiera w sobie operacje na wektorach. Niestety można definiować
tylko jednowymiarowe wektory. Istnieją jednak sposoby, żeby to ominąć.
3.3. Skojarzone wektory zmiennych
Jest to najbardziej użyteczna cecha Perla. Można dzięki niej tworzyć
tablice użytkowników według "login name" i tablice nazw plików.
Prefiksem dla tego rodzaju zmiennych jest znak procenta (%). Kluczem dla
tych wektorów są zmienne znakowe (numeryczne ulegają konwersji do
znakowych). Np.
%quota = ("root",100000,
"pat",256,
"fiona",4000);
odwoływanie się do elementów ma następującą postać:
$quota{dave} = 3000; # dave - klucz, 3000 - wartość
W Perlu jest predefiniowany wektor skojarzony %ENV, zawierający zmienne
środowiska. Np.
if ($ENV{DISPLAY})
{
print "Zmienna DISPLAY jest ustawiona\n";
}
Zdefiniowane są funkcje do obsługi tego rodzaju wektorów, są to: each,
keys, values i delete. Należy przy tym zwrócić uwagę na wyłączanie się
nazw. W Perlu zmienne, wektory, wektory skojarzone, funkcje i pakiety
mogą mieć ta sama nazwę i nie będzie to rodzić konfliktów.