Gå til innhold

Anbefalte innlegg

I perl kommer du borti variabler med $, @ og % foran. Ikke alltid så lett å skjønne hvorfor man vil ha med denne jungelen av kryptiske tegn.

 

Veldig kort fortalt betyr dem følgende:

 

$variabel er en variabel eller et objekt.

 

@array er en array

 

%hash er en assosiativ array eller hash som det heter.

 

#!/usr/bin/perl

# $var er en enkel variabel (scalar)
$var = "testvariabel med litt tekst";

print "\$var inneholder: $var\n";

# @array er en array
@array = ( 1, 2, 3, "a", 5, "d", "moesen");

# hvis vi skal ha ett element fra @array'en, er det imidlertid en scalar...
# (litt vanskelig i begynnelsen å fatte dette), må derfor ha $array[0] f.eks

# 4'de element (husk at vi teller fra 0)
print "4'de element i \@array er: $array[3]\n";

# skal vi ha flere elementer, blir det imidlertid en array!
# henter ut 1'te og 3'de element
@en_annen_array = @array[0,2];

# for å hente ut 4 første elementer, gjør slik:
@fire_elementer = @array[0..3];




# %hash er en assosiativ arrray:
%hash = ( navn => 'torbjørn', alder => 83, bosted => 'månen' );

# dette ligner til en viss grad på php
# merk at også her, når vi henter ut kun ett element, bruker vi $
# for hashes bruker man {} istedet for []

$personens_navn = $hash{navn};

# merk også at det er trykt å bruke $hash{nanv} istedet for $hash{'navn'}

# vi kan ta ut flere elementer i en array (såkalt array slice)
# bruker da selvsagt @ foran variabelnavnet!
@litt_data = @hash{'navn', 'alder'};

 

Hvis du leste CGI tutorialen (nr 3), så så du at jeg brukte $ENV{REQUEST_METHOD} uten helt å forstå det kanskje.

 

dette kommer fra hash'en %ENV

ENV som i "ENVironmental variables", og jeg følger standard notasjon for å hente ut data som beskrevet her.

 

Det kan skrives side opp og side ned om dette emnet, og det er meget interessant, man kan referere til funksjoner også, &funksjon, som om det var en variabel. array referanser og hash referanser er meget spennende lesing ;)

 

Objektorientering hører også hjemme under dette emnet, men det gjør seg bedre i en egen tutorial.

Lenke til kommentar
Videoannonse
Annonse

Stusset litt på denne setningen

# %hash er en assosiativ arrray:
%hash = ( navn => 'torbjørn', alder => 83, bosted => 'månen' );

Hvorfor må du bruke "=>"?

 

 

 

 

Kan koden være slik og gjøre det samme?

# %hash er en assosiativ arrray:
%hash = ( navn == torbjørn, alder == 83, bosted == månen );

 

Hva blir forsjellig?

Lenke til kommentar

== brukes til å sammenligne to tall, ikke til å angi verdier i en hash ;)

 

=> brukes bare for å si at denne nøkkelen skal peke på denne verdien.

 

En hash kan også lages ett og ett element av gangen:

#lager en tom hash
%person = ();

$person{nanv} = 'Espen';
$person{interesse} = 'Perl';
$person{kompetansenivaa} = 'Høyt';

Lenke til kommentar

=> er synonymt med , (komma), og brukes bare for at koden skal bli lettere å lese. Han kunne altså like godt skrevet f.eks.

%hash = ( navn, 'torbjørn' );

 

Det anbefales forøvrig at man quoter hash-nøkler også, slik at ikke det blir forvirring om man bruker et reservert ord. Man bør altså skrive

 

%hash = ( 'navn' => 'torbjørn' );

eller

$hash{'navn'} = 'torbjørn';

 

Legg merke til at man bruker % når man adresserer "hele" hashen, og $ når man bare adresserer et enkelt element.

Lenke til kommentar

Så koden her...

 

# %hash er en assosiativ arrray:
%hash = ( navn => 'Torbjørn', alder => '83', bosted => 'månen' );

Blir noe det samme som denne koden...

# %hash er en assosiativ arrray:
%hash = ( navn, 'torbjørn', alder, '83', bosted, 'månen' );

 

Og er det samme som...

%person = ();

$person{navn} = 'Torbjørn';
$person{alder} = '83';
$person{bosted} = 'månen'
print "$navn er $alder og bor paa $bosted\n"

Stemmer det?

Er Perl så enkelt så er det jo sinnsykt..

Endret av moesen
Lenke til kommentar

hvis du leser "videre med hashes", så vil du se at en hash kan lages fra en kommaseparert liste akkurat som en array.

 

vet ikke helt hvordan du tenker videre...

 

du vil kanskje gjøre dette?

 

$navn = 'Torbjørn';
$alder = '83';
$bosted = 'månen';
print "$navn er $alder og bor paa $bosted\n"

 

hashes er bare en array med spesielle egenskaper. det er ingengint i veien for å bruke den slik:

 

$person{navn} = 'Torbjørn';
$person{alder} = '83';
$person{bosted} = 'månen';
print "$person{navn} er $person{alder} og bor paa $person{bosted}\n";

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...