Torbjørn Skrevet 6. desember 2003 Del Skrevet 6. desember 2003 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
moesen Skrevet 6. desember 2003 Del Skrevet 6. desember 2003 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
Torbjørn Skrevet 6. desember 2003 Forfatter Del Skrevet 6. desember 2003 == 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
tvangsgreie Skrevet 6. desember 2003 Del Skrevet 6. desember 2003 => 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
moesen Skrevet 6. desember 2003 Del Skrevet 6. desember 2003 (endret) 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 6. desember 2003 av moesen Lenke til kommentar
Torbjørn Skrevet 6. desember 2003 Forfatter Del Skrevet 6. desember 2003 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
moesen Skrevet 6. desember 2003 Del Skrevet 6. desember 2003 Ok, missforsto litt der men jeg mener at jeg kan det nå. Trodde det var slik at $person{navn}='Torbjørn'; $person var en variabel som kunne het for navn og at det "navnet" skulle stå i {}...Men jeg skjønte nå at det var litt på jordet. Lenke til kommentar
Torbjørn Skrevet 6. desember 2003 Forfatter Del Skrevet 6. desember 2003 hashes kan virke litt som en database, eller som et objekt. hvis det hjelper på tankegangen. det er ikke livsviktig å kunne for små hacks, men det er et meget sentralt begrep og bør absolutt kjennes til. Lenke til kommentar
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå