HOME -> PERL_TUTORIAL -> perl-05 Lørdag, 21. Oktober 2017

HOME
FORUM
OPEN DIRECTORY
BOOKMARK
Offentliggjort 2003 - Opdateret n/a

Lektion 05

Arrays og lister

Indhold

 

TopIndledning / første eksempel
Lektionen handler om den type af variabler som betegnes for arrays. Et array kan indeholde flere værdier/elementer.
Eller sagt på en anden måde! Vil du gemme flere samhørrige værdier/data kan dette gøres i en liste. Den variabel type der anvendes til dette i perl hedder array. Efterfølgende eksempel illustrerer dette.


#!/usr/bin/perl -w

use strict;
use CGI::Carp qw(fatalsToBrowser);

my @Data = ("Fred",35,"Ålborg");

print "Content-type: text/html\n\n";
#Her kan du placere din doctype!
print "<html><head><title>Eksempel på array</title>\n";
print "</head><body>\n";

print "@Data";

print "</body></html>\n";


Resultat:


Gennemgang af scriptet.

I ovenfor stående eksempel har vi defineret et array som hedder @Data. At definere eller erklære et array er i princippet det samme som når vi erklærer/definere en skalar variabel. I perl anvendes @ (at symbol) til at angive et array, efterfulgt af array navnet.
Når du definerer dit array kan du tildele denne nogle værdier, du kan også vente med at tildele værdier til senere. I vores eksempel har vi tildelt værdierne Fred, 35 og Ålborg. Indholdet i arrayet er omgivet af parenteser, og de enkelte værdier/elementer er adskilt med komma.
Hvis du ikke tildeler dit array nogen værdier/elementer er den i modsætning til en skalar ikke udefineret, men derimod tom. Syntaksen for et tomt array er my @data;

Et array indeholder i princippet en række (liste) af skalare data. De enkelte skalare værdier i eksemplet er Fred og Ålborg som er tekst strenge og 35 som er et numerisk værdi.

Det eneste som eksemplet gør, er at udskrive listen.

Nyttige oplysninger

Du kan sagtens have følgende i et og samme script $navn, @navn og %navn, da skalare, arrays og hashes tolkes forskellig af perl.

Du kan nemt anvende skalare i et array f.eks.
my $alder = 35;
my $by = Ålborg;
my @data = ("Fred","$alder","$by");

Har du brug for en liste indeholdende tal eller bogstaver i fortløbende rækkefølge kan du anvende følgende syntaks:
my @talliste = (1..100); # udskriver en liste med 100 elementer, nemlig tallene 1 til 100.
Eller my @talliste = (1,4,8,41..50); # udskriver 1 4 8 41 42 43 44 45 46 47 48 49 50.
my @bogstaver = (a..z); # udskriver a til z.

 

TopTilgå enkelte værdier i et array
Som tidligere nævnet anvendes skalare som enkeltværdier til et array. Har du brug for at tilgå et af disse værdier/elementer som er i et array, kan dette gøres på følgende måde.


#!/usr/bin/perl -w

use strict;
use CGI::Carp qw(fatalsToBrowser);

my @Data = ("Fred",35,"Ålborg");

print "Content-type: text/html\n\n";
#Her kan du placere din doctype!
print "<html><head><title>Eksempel på array</title>\n";
print "</head><body>\n";

print "$Data[0] er $Data[1] år, han bor i $Data[2]";

print "</body></html>\n";


Resultat:


Gennemgang af scriptet.

Nok engang anvender vi samme array som før, nemlig @Data som indeholder tre elementer. Denne gang tilgås de enkelte værdier i selve arrayet via $Data[0], $Data[1] og $Data[2].

$Data[0] tilgår første element i arrayet som er Fred.
$Data[1] tilgår andet element i arrayet som er 35.
$Data[2] tilgår tredje element i arrayet som er Ålborg.

HUSK!
  • Første element er 0.
  • Værdi eller element man ønsker at tilgå skal stå i parentes []
  • Der må ikke være mellemrum mellem $Data og [n]
Eksemplet viser tydelig at vi tilgår en skalar variabel i vores array, idet vi anvender $ for at kalde elementet i arrayet.

Nyttige oplysninger

Hvis du har et array som @Data, kan du via kommandoen $#Data finde frem til sidste element i arrayet. Hvis listen som i vores eksempel indeholder tre elementer, vil $Data[$#Data] returne sidste element, nemlig [2].

 

TopLister på lister på lister o.s.v
At anvende arrays giver mange muligheder for at kombinere forskellige lister. Fra html kender vi begrebet tabeller. Princippet er egentlig den samme her. Vi laver en tabel i en tabel, her er det bare en liste i en liste.


#!/usr/bin/perl -w

use strict;
use CGI::Carp qw(fatalsToBrowser);

my @liste_1 = ("Fred","Wilma");
my @liste_2 = ("Ålborg","Århus",@liste_1);
my @liste_3 = ("Ålborg","Århus",[@liste_1]);

print "Content-type: text/html\n\n";
#Her kan du placere din doctype!
print "<html><head><title>Eksempel på array</title>\n";
print "</head><body>\n";

print "liste_2: @liste_2<p>&nbsp;</p>\n";
print "liste_2[3]: $liste_2[3]<p>&nbsp;</p>\n";
print "liste_3: @liste_3<p>&nbsp;</p>\n";
print "liste_3[2][1]: $liste_3[2][1]<p>&nbsp;</p>\n";

print "</body></html>\n";


Resultat:


Gennemgang af scriptet.

Eksemplet indeholder tre arrays, nemlig @liste_1, @liste_2 og @liste_3. Læg specielt mærke til de to sidste lister. Begge er identiske med hensyn til deres indhold, lige bortset fra at @liste_3 har parenteser [] omkring kaldet til @liste_1. Dette giver to forskellige resultater. Ved arrayet @liste_2 tilføjes indholdet fra @liste_1, medens der i @liste_3 åbnes for en ny underliste indeholdende elementerne fra @liste_1 da vi har anvendt [] parenteser.
(Du skal lige huske på at array navnet som tilføjes liste 2 og 3 ikke må stå i anførselstegn.)

Hvis du klikker på linket Vis eksempel kan du tydelig se forskellen.

Liste_2 indeholder Ålborg, Århus samt indholdet fra @liste_1. Den komplette liste ser derfor således ud: Ålborg, Århus, Fred, Wilma

liste_2[3] indeholder navnet Wilma, da dette er det tredje element i arrayet.

liste_3 indeholder tre elementer. Når du ser den udskrevet bliver det noget i stil med Ålborg, Århus, ARRAY(0x804c760). Det sidste element er blot en reference til en underliste.
Vil du tilgå et element i denne underliste skal du angive f.eks. $liste_3[2][1].

$liste_3[2] tilgår det tredje element i liste_3 nemlig ARRAY(0x804c760) som er vores reference til @liste_1.

$liste_3[2][1] tilgår det andet element i vores underliste @liste_1 som er Wilma.

Hvis nu du vil tilgå det første element i underlisten skal du angive @liste_3[2][0]; som returnerer Fred.
Nyttige oplysninger

Hvis du nu har lavet en udefineret array som hedder my @data; kan du altid på et senere tidspunkt tilføje elementer til denne. Dette kan gøres ved at skrive $data[1][3] = Flintstone; På denne måde har du tilføjet to elementer til arrayet @data, nemlig 0 og 1. Elementet 0 er fortsat udefineret og dermed tom. Elementet 1 indeholder en reference til en underliste indeholdende 4 elementer. Det fjerde element er Flintstone. De tre andre elementer 0, 1, 2 er tomme.

 

TopFunktioner til manipulation af lister/arrays
Der findes mange perl funktioner til manipulation af lister. Her er listet et par af disse. En nærmere og mere fyldestgørende beskrivelse finder du under Funktioner til lister/arrays og hashes

Split - at opdele/splitte
Hvis du har nogle strenge som altid er identiske i strukturen kan du anvende perl funktionen split til at behandle disse. Split opdeler som navnet antyder strengen i enkeltdele, som du efterfølgende kan lægge i en liste.

Join - sammenføje
Join har den modsatte effekt af split. Via join kan man tage data fra en liste og sætte dem sammen til en streng.

Push - at tilføje
Unshift - at tilføje
Via push og unshift kan du tilføje elementer i din liste. Push tilføjer et element bagerst i listen og unshift tilføjer et element forrest i listen.

Pop - slette element
Shift - slette element
Splice - slette element
Via pop og shift kan du slette elementer i en liste. Anvender du pop så slettes sidste element i listen.
Anvender du shift vil det første element i listen blive slettet. Efterfølgende elementer vil tilpasse sig denne ændring og $liste[4] vil blive $liste[3], med andre ord: alle efter følgende elementer i listen vil rykke en plads frem. Det er altså kun mulig at slette første eller sidste element i en liste ved brug at shift og pop.
Via splice kan du slette første eller sidste element samt elementer i midten. Husk også her at elementerne rykker en plads frem når der slettes. Splice er en form for universal funktion for push, unshift, pop og shift. Foruden dette kan splice en masse andet.

Sort - sortere elementer
Reverse - vende rækkefølgen
Disse giver mulighed for at ændre/sortere rækkefølgen i din liste.

 

TopSidste bemærkninger omkring lister og arrays.
Skriver du $liste[3] = ""; vil det fjerde elements indhold blive slettet. Elementet vil dog fortsat være der.
Skriver du $liste[3] = "Barney"; vil det fjerde elements indhold blive overskrevet, og ny indhold vil være Barney.

 

Næste lektion omhandler brugen af hashes.

HASHES .... associative arrays >>

 

Copyright © 2002 - 2017
NETeXplorer.dk · All rights reserved Top