HOME -> PERL_TUTORIAL -> perl-06 Onsdag, 13. December 2017

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

Lektion 06

Hashes

Indhold

 

TopIndledning / første eksempel
Det tilrådes at læse artiklen om arrays før læsning af denne artikel. Jeg har i artiklen omkring arrays skrevet nogle oplysninger som også er gældende for hashes, disse vil ikke blive gentaget her.

I forbindelse med lister/arrays har vi set, at man kan tilgå de enkelte elementer i et array via deres indeksnummer. Ved at angive f.eks. $liste[5]; vil det 6. element i arrayet @liste blive returneret.
Når vi nu taler hashes eller associative arrays som de også hedder, vil der per element blive gemt to værdier, et navn samt et tilhørende værdi.
Når du skal tilgå en værdi i en hash vil det ikke være via indeksnummer, men derimod via navnet. Værdi og navn er nemlig associeret med hinanden. Man kan også sige at navnet er nøglen, og via nøglen tilgås den tilhørende værdi.

Eksempel


#!/usr/bin/perl -w

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

# første metode
my %Data_1 = ("navn","Fred", "alder",35);

# anden metode
my %Data_2 = (navn => "Fred", alder => 35);

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

print %Data_1,"<p>&nbsp;</p>\n";
print %Data_2,"<p>&nbsp;</p>\n";

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


Resultat:


Gennemgang af scriptet.

At definere eller erklære hashes er i princippet det samme som når vi erklærer/definerer arrays. I perl anvendes % (procent symbol) til at angive hashes, efterfulgt af hashens navn.
Ved hashes kan du tilføje NAVN og værdi, eller blot lade dem være tomme.
Syntaksen for hashes ses af eksemplet. Her har jeg defineret to hashes, nemlig %Data_1 og %Data_2. Resultatet af disse to hashes er den samme uanset syntaksen.

I den første %Data_1 er navn og værdi adskilt med komma. Således vil alle ulige numre som 1, 3, 5 o.s.v. være NAVNET eller nøglen, og den tilhørende værdi har lige numre som 2, 4, 6 o.s.v. Endvidere er alle par også adskilt med komma.
Foruden dette skal man altid have anførselstegn omkring nøglerne/NAVN.

I %Data_2 er der en såkaldt "fat comma" der adskiller navn og tilhørende værdi. De enkelte par er adskilt med komma. Ved at anvende syntaksen som i %Data_2 kan man undlade at bruge anførselstegn ved nøglerne/NAVNE, så længe de overholder "Regler for variable navne".

Efter min mening er %Data_2 den syntaks som er nemmest at overskue.

Som ved arrays kan man erklære tomme hashes via my %Data;. Ligeledes indeholder hashes skalare variabler som elementer, nemlig tekststrenge og numeriske værdier. Hashes ligner i bund og grund meget arrays.

Nyttige oplysninger

Du kan sagtens tilføje en skalar variabel til din hash
my $alder = 35;
my %Data = (navn => "Fred", alder => $alder);
Hashes er enorm gode at anvende i forbindelse med dine CGI scripts. Når du f.eks. modtager data via et formular fra din hjemmeside, kan formular feltets navn være nøglen, og værdien er inputtet fra brugeren.

 

TopTilgå enkelte værdier i hashes
Når man skal tilgå eller indsætte værdier i hashes gøres dette via nøglen/NAVNET.

Eksempel


#!/usr/bin/perl -w

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

my %Data = (navn => "Fred", alder => 35, by => "Ålborg");

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

print "$Data{'navn'} er $Data{'alder'} år, han kommer fra $Data{'by'}.\n";

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


Resultat:


Gennemgang af scriptet.

Vi har erklæret hashen %Data. Denne indeholder tre værdier (NAVN => værdi). I eksemplet tilgår vi de enkelte værdier i hashen via deres NAVN/nøgle på følgende måde $Data{'NAVN'};.
Det er meget vigtig at nøglen er angivet med krøllede parenteser {}, der må ikke være mellemrum i syntaksen.

Du kan evt. godt nøjes med at angive $Data{NAVN};, altså uden anførselstegn. Så længe de krøllede parenteser kun indeholder nøglen.

 

TopFunktioner til manipulation af hashes
Også ved hashes kan der anvendes funktioner for at manipulere med indholdet. De væsentligste er listet her. En nærmere og mere fyldestgørende beskrivelse finder du under "Funktioner til lister/arrays og hashes".

Mange af Perls funktioner gælder for både lister (eller arrays) og hashes, nogle af dem dog kun for hashes, da det er lidt specielt at manipulere med hashes.

Keys - nøgler
Via funktionen keys kan du få en liste med alle nøgler i en hash.

Vi antager, at vi har en hash %Data som indeholder nøgler og værdier som ikke kendes. Ved at anvende @noegler = keys(%Data); kan vi finde frem til nøglerne, da disse gemmes i arrayet @noegler.
Efterfølgende kan vi tilgå de enkelte værdier i hashen %Data, via f.eks. $Data{$noegler[2]} uden at kende den nøjagtige nøgle.

$antal = keys(%Data); gemmer antallet af nøgler fra %Data i skalaren $antal.

 

Funktionen keys returnerer mere eller mindre data tilfældig. For at få disse sorteret kan man anvende funktionen sort i en løkke.

foreach $key (sort(keys %Data)) {
print $key, '=', $Data{$key}, "\n";
}


Delete - Slette
For at slette et nøgle/værdi par har Perl funktionen delete.

Values - liste af værdier i en hash
Via funktionen values får du en liste af alle værdier i en hash.

 

TopSidste bemærkninger omkring hashes
Når du nu angiver $Data{navn} = "Fred"; henvises til det element i hashen %Data som har nøglen navn. Denne får tilføjet værdien Fred. Hvis værdien i forvejen var noget andet, vil den blive overskrevet af den nye værdi Fred.
Skulle dette nøgle/værdi par ikke eksistere i hashen endnu, vil den ganske enkelt blive tilføjet.

 

Næste lektion omhandler om strenge.

Strenge (Strings) >>

 

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