Till Startsidan
JavaScript.nu hostas av Ballou.se

Skaffa webbhotell
Från 12 kr/månad.

100 kr rabatt för JavaScript.nu-
besökare.

JavaScript.nu / Perl-kurs / Olika variabler

LÄR DIG ATT PROGRAMMERA PERL
Olika variabler

Perl har flera olika sorters variabler. Vi ska steg för steg gå genom de olika variablerna.
Den första sorten, scalar, är den vanligaste och simplaste variabeln då den endast kan innehålla en sträng. Här deklareras variabeln favfarg och initieras med värdet röd:
$favfarg="röd";

Vill vi senare skriva ut variabeln så skriver man helt enkelt ut den bland texten man vill skriva ut:

#!/usr/bin/perl
$favfarg="röd";
print "Content-type:text/html\n\n";
print "Min favoritfärg är: $favfarg";
En annan sorts variabel är Array, som kan lagra en massa olika variabler. Denna använder inte ett dollartecken, $, som scalar gör. Denna använder istället ett @:
@vinnare=("Sven Svensson","Niklas Joelsson","Kristoffer Henriksson","Bert Bergkvist");
Vill du använda värdena måste du bekräfta vilket värde du vill använda med ett index, varför man även kallar arrayen dimensionerad array:
#!/usr/bin/perl
@vinnare=("Sven Svensson","Niklas Joelsson","Kristoffer Henriksson","Bert Bergkvist");
print "Content-type:text/html\n\n";
print "$vinnare[0] vann tävlingen. Sist kom dock $vinnare[3].";
Utmatningen blir då:
Sven Svensson vann tävlingen. Sist kom dock Bert Bergkvist.

Kom ihåg att indexnumrena börjar från noll och går uppåt. I detta fall där det finns fyra namn blir det sista indexet (Bert Bergkvist) 3.
Vill man se det högsta indexet använder man $#vinnare, vilket i vårt fall blir 3. Observera, detta är det sista indexet som arrayen har, inte så många index som finns. Det finns 4 index i vårt exempel, men då det första är 0 så blir det sista 3:

#!/usr/bin/perl
@vinnare=("Sven Svensson","Niklas Joelsson","Kristoffer Henriksson","Bert Bergkvist");
print "Content-type:text/html\n\n";
$antal=$#vinnare + 1;    # 3+1=4
print "I år ställde $antal deltagare upp.";
Utmatningen blir då:
I år ställde 4 deltagare upp.

Ytterligare en variabeltyp är hashes, som symboliseras av ett procenttecken, %. Denna är inte dimensionerad med indexnummer som arrayen är, utan denna associerar ord som du själv angivit med de olika värdena.

#!/usr/bin/perl
%pris=("Guld","Sven Svensson","Silver","Niklas Joelsson","Brons","Kristoffer Henriksson","Tröstpris","Bert Bergkvist");
print "Content-type:text/html\n\n";
print "$pris{'Guld'} fick guld. Tröstpriset vanns av $pris{'Tröstpris'}.";
Utmatningen blir då:
Sven Svensson fick guld. Tröstpriset vanns av Bert Bergkvist.


I Perl kan du utan problem ändra en talvariabel till en sträng, och tvärt om.

$antal="Tre";                                    #En sträng
$antal=3;                                        #Ett tal
$antal="$antal björnar såg $antal hästar.";      #En sträng
Du kan liksom många andra programmeringsspråk ändra numeriska variabler så här:
$nr=3;           # 3      (3)
$nr=$nr * $nr;   # 9      (3*3)
$nr+=5 + $nr;    # 23     (9+(5+9))
$nr--;           # 22     (23-1)
--$nr;           # 21     (22-1)
$nr++;           # 22     (21+1)
++$nr;           # 23     (22+1)
$nr/=2;          # 11.5   (23/2)
För att förså skillnaden mellan ++$nr; och $nr++; visas detta script:
#!/usr/bin/perl
$a=5;
$b=0;
$x=5;
$y=0;

$b=$a++;   #först blir b=a (=5), sedan blir a ett större (=6)
$y=++$x;   #först blir x ett större (=6), sedan blir y=x (=6)

print "Content-type:text/html\n\n";
print "a=$a\n";
print "b=$b\n";
print "x=$x\n";
print "y=$y";
Eftersom värdet ändras innan det returneras om ++ är före en variabel och det ändras efter det returneras om ++ är efter variabeln så blir utmaningen (detta är till viss del överkurs och kan ignoreras om du inte fullt förstår vad som menas):
a=6
b=5
x=6
y=6

Problem kan dock uppstå i sådana här script:
#!/usr/bin/perl
$aaa="111";
$aaa2="222";
print "Content-type:text/html\n\n";
print "-$aaa-$aaa2-$aaaa";
Utskriften blir då:
-111-222-

Variabeln $aaaa finns ju inte, och därför skrivs den inte ut. Scriptet fungerar dock utan problem. Fast detta var kanske inte vad vi ville ha, vi kanske ville ha denna utskrift:
-111-222-111a

Då skulle man istället ha haft detta script:

#!/usr/bin/perl
$aaa="111";
$aaa2="222";
print "Content-type:text/html\n\n";
print "-$aaa-$aaa2-$aaa";
print "a";
Detta ger den tänkta utskriften.

[Perl guiden] - [Till kapitel 4]






Copyright © Omid Rouhani 1997-2010; Alla rättigheter reserverade.
Guider: [ HTML guide ] - [ JavaScript guide ] - [ DHTML guide ] - [ Perl guide ] - [ Sitemap ]