Grunder i Perl

Nu tänkte jag att vi skulle gå igenom lite väldigt enkel perl programmering så att alla kan ta del av detta underbara script språk. Detta är en perfekt nybörjar artikel för alla som skulle vilja ha någonstans att börja när det gäller perl så dom själva sen får avgöra om det är värt att fortsätta. I denna artikeln får ni ta del av ett antal kod exempel och dom är alla underGPL2 licensen även om det inte finns någon anledning får en person att sno dom.

Jag ska inte snöa in på perls historia och om dess skapare, Larry Wall, utan lämnar det till den eventuella boken ni förhoppningsvis köper efter denna artikel. Jag vill bara göra det klart att denna artikel inte på något sättstödjer perl på windows eftersom jag själv aldrig har kodat perl på windows.

Perl kommer som standard på i stort sett alla UNIX eller System V baserade system, personligen använder jag alltid FreeBSD och där hittar man perl i /usr/bin/perl. En perl fil måste alltid innehålla en rad som visar att följande innehåll i denna fil ska tolkas genom perl tolkaren. UNIX läser alltid in de två första bitarna i filer och om den hittar dessa två tecken #!, som för någon anledning kallas för shebang, så kollar den sökvägen som följer efter shebangen och vet så hur resten av filen ska tolkas, i detta fallet då genom /usr/bin/perl.

En shebang räcker dock inte för att köra en perl fil utan det behövs något extra. Vi måste alltså göra den körbar eller EXEkverbar(så alla förlorade windows själar också känner igen vad jag talar om). En perl fil på UNIX system behöver dock inte ha någon filändelse även om de flesta föredrar att döpa dom till fil.pl eller fil.p så är detta inte nödvändigt eftersom UNIX inte bryr sig om vad filen heter utan innehållet. För att göra mig förstådd ska jag lägga till .pl till mina exempel men dom kan lika gärna ha namn som perlfil". För att göra en fil körbar i UNIX så utför man chmod kommandot på följande vis.

 chmod +x fil.pl

Detta gör den helt enkelt körbar för alla, kommandot är exakt samma sak som att göra chmod 755 fil.pl fast lite kortare och enklare att komma ihåg om man tänker på +x som i eXecute eller eXekverbar.

Vi går pang på sak genom att förklara olika variabler.Det nog absolut vanligaste i perl är scalar variabeln, den kan innehålla ett ensamt värde alltså en sträng som är ETT värde och inte flera. Nu menar jag inte att en scalar variabel inte kan innehålla flera ord, jag menar bara att den inte kan innehålla flera värden. Följande kodexempel visar ett par scalar variabler, $scalar, som alla har ett värde.

 #!/usr/bin/perl -w
 
 $scalar = 3.14;                # Ett siffervärde
 $scalar1 = "Värde";            # Ett värde
 $scalar2 = "Detta är ett värde";    # Ett värde
 $scalar3 = "Detta är 3.14";        # Ett värde
 $scalar4 = "Detta är $scalar";        # Ett värde
 
 exit();

I en scalar variabel kan man alltså stoppa in precis vad som helst, det förändrar inte faktumet att den bara är ETT värde i perls ögon. Som ni ser har jag till och med haft in med en annan scalar variabel i $scalar4, detta går hur bra som helst för då blir värdet för $scalar4 samma som för $scalar3. Ni la nog också märke till hur jag började hela kod exemplet, alltså med en shebang för att indikera att detta är en perl fil som ska tolkas genom /usr/bin/perl.

Den extra -w växeln jag la till är bra att göra till en vana när ni kodar, den sätter på extra varningar för eran kod och visar saker som perl tolkaren hade varit väldigt snäll mot annars. Jag blir inte alls förvånad om den blir standard i framtida perl versioner.

Nu har vi ju massa variabler deklarerade men om vi kör denna filen i våran terminal händer ju inte mycket. Nu kan det vara dags att lägga till något som print i våran fil. Funktionen print är en av många inbyggda funktioner i perl och skriver bland annat ut värden till skärmen eller STDOUT(standard out) som det kallas på dataspråk. Något som print "hej blindstyre"; skriver helt enkelt ut strängen "hej blindstyre" till skärmen.

Om vi nu lägger till något som print $scalar; eller print "Pi är $scalar"; i våran fil så kan ni nog själva förstår vad vi får se. Vi lägger ju självklart till print raderna efter deklarationen av variablerna eftersom perl egentligen inte vet vad $scalar är innan du har visat det.

En annan sak ni nog ofta kommer att använda i perl är arrays, tyvär kommer jag helt enkelt inte på någon vettig översättning för ordet. En array är en variabel som kan ha flera värden, detta innefattar också att den kan vara flera scalar variabler.

Man känner lätt igen en array tack vare @ tecknet framför namnet på din array. Alltså $ som i $calar och @ som i @rray, nu börjar ju allt bli klart för oss! Det fina med en array är som sagt att den kan ha flera värden och du sedan kan kalla ett eller flera värden genom att uppge dess siffervärde, alltså ordningen som det deklareras i din array.

Som äkta data människor börjar vi räkna vid 0 och inte 1. Något som @array("vakna", "duscha", "jobbet") är ett exempel på en array med tre olika värden. När vi nu ska kalla på ett av dessa värden så förvandlas våran array helt plötsligt till en scalar fast med en extra liten finess. En rad som print $array[2]; hade skrivit ut värdet "jobbet" till skärmen och om du skriver ut $array[0] till skärmen så ser du värdet vakna eftersom vi som sagt räknar från 0 inte 1 och vi börjar från vänster.

Jag ska ge er ett litet kodexempel med en array men kommer också att visa lite andra roliga saker som jag ska gå igenom med er senare. Här har ni ett exempel på att använda en array bland annat.

 #!/usr/bin/perl -w
 
 @array = ("Januari", "Februari", "Mars", "April", "Maj", "Juni", "Juli",
 "Augusti", "September", "November", "Oktober", "December");
 
 print "Kan du månaderna?\n\n\a";
 
 $c = -1;
 while($c < 11) {
     $c++;
     print "$array[$c]\n\a";
     sleep(1);
 }
 
 exit();

Om vi nu analyserar koden ovanför så ser vi omedelbart våran array precis efter shebangen, den är av enklaste slaget och innehåller 12 olika värden. Våra olika värden numreras från 0 till 11 så $array[12] är INTE December utan finns inte. Ni har nog förstått hur en array fungerar vid det här laget så vi ska gå vidare till de andra roliga funktionerna i koden ovanför.

Raden under våran array är ju en enkel print funktion som skriver ut lite text men på slutet ser ni kanske lite annorlunda saker. I script språken perl och php finns ett antal tecken som har speciella betydelser för script tolkaren. Som ett exempel har vi # tecknet som vid början av en rad gör att hela resten av raden ignoreras av perl och på så vis kan användas för kommentarer.

Om man nu vill använda # i sin kod så att folk ska kunna se det då måste man använda en \ framför så att # visas som vanligt. Ett exempel är "#kommentar" som hade ignorerats av perl, ett annat exempel är print "text \#\#\# \"text\""; som hade gett resultatet text ### "text". Nu förstår ni nog hur \ kan vara bra att ha.

Nu till förklaringen av de där konstiga sakerna i slutet av print raden i koden. I perl har vi ett antal sorts funktioner som ser ut ungefär som \n och gör olika saker som kan vara bra att ha. En \n i slutet av varje rad är inte fel eftersom \n bryter texten och ger en ny rad, \n är också bra att söka efter i text som tex har matats in genom ett webbformulär och sen ersätta med tex taggen.

Det finns andra liknande funktioner som \t vilket ger dig en tab alltså ett antal mellanrum. En annan liknande funktion som används i kodexemplet är \a som är en rolig liten grej men oftast helt onödig att kunna men den gör att system högtalaren piper, förutsatt att den är ikopplad.

Om vi går vidare så ser vi en enkel variabel deklaration, precis innan saker blir lite komplicerade. Jag ska ta detta steg för steg så ni vet exakt vad koden gör. En sak som är konstaterad är att $c är lika med -1, detta är ett minus värde vilket går jätte bra i perl. Nu kommer funktionen while som talar att något ska hända medan ett vilkor uppfylls eller tills ett vilkor uppfylls. I detta fallet säger vi till datorn att medan(while) $c är mindre än(. Så hittills så kollar vi vilket värde $c har, -1, och säger att medan $c är mindre än 11 så ska vi köra kod.

Alltså kommer koden köras tills $c blir lika med 11 för då uppfylls ju vårat vilkor och while funktionen har inte längre någon anledning att köra koden. Om vi nu går vidare till koden inuti while funktionen, detta är alltså koden som utförs tills while has uppfyllt sina vilkor. Det första vi ser är $c++; som inte precis förklara sig självt så därför ska jag göra det.

Varje gång du sätter ++ eller -- bakom en variabel så kommer perl att öka värdet av det sista tecknet i strängen. Alltså så blir en etta till en två efter att man kört den igenom ++. På samma sätt blir en tvåa till en etta om man kör den igenom --. Så om $x är lika med 3 så blir den lika med 4 om man kör $x++ i sin kod och om $x är lika med 3 så blir den lika med 2 om man kör $x-- i koden.

Nästa rad ser ju enkel ut och det är den också, en enkel print funktion som skriver ut ett av värderna i våran array. Skillnaden är att istället för ett siffervärde inom [] så har vi en scalar variabel, detta går utmärkt eftersom denna scalar variabel har ett siffervärde. Så länge som $c är 0-11 så får ni inga fel.

Nästa rad är en ny funktion som liknar, som många andra perl funktioner, en gammal C/C++ funktion och låter programmet sova i ett visst antal sekunder.