Till index

Exempel på perlprogram
att exekveras vid DOS-prompten

Efter de första exemplen finns förklaringar och övningsuppgifter.

 



1. Hello, World! ^
# This is my first Perl program, called hello.pl
# It's just a simple perl program.
# It's made on Nov. 24, 1996 by Tony Zhang.
$mystring = "Hello, World!";
print ($mystring); # skriv ut strängen på skärmen

De flesta programexemplen är hämtade ur boken Perl in 21 days av Thony Zhang. I detta första program skall resultatet se ut så här när du exekverar programmet vid DOS-prompten:

C:\> perl hello.pl
Hello, World!
C:\>

Tecknet #
De tre första raderna utgörs av kommentarer. #-tecknet talar om för perlkompilatorn att efterföljande tecken fram till radslutet skall ignoreras vid programkörningen. Du kan använda kommentarer för att förtydliga programmen för dig själv och andra. Man kan även lägga in kommentarer i slutet av rader som innehåller vanliga perlsatser. Ett exempel på detta ser du på rad 5.

Variabler
På rad 4 i programmet ser du varibelnamnet $mystring. Ett varibelnamn inleds alltid med ett $-tecken och en bokstav. Ett variabelnamn referar till ett innehåll. Vad innehållet består av bestäms i tilldelningssatser. Rad 4 är ett exempel på en tilldelningssats, där =-tecknet kallas "tilldelningstecken". Rad fyra kan beskrivas på följande sätt: "Variabeln $mystring tilldelas innehållet ’Hello, World!’."

Strängar
Det mesta av innehållet i program består av speceilla programmeringsord, som t ex print, if och while. Texten "Hello, World!" däremot är ju ingen speciell programmeringskod, utan i stället en text vilken som helst, som du lägga in i en variabel eller skriva ut på skärmen. Sådana texter måste omges av citattecken, för att inte Perl skall blanda samman den med övrig programmeringskod. En sådan text med citattecken kallas för "en sträng".

Extra uppgifter
1.1
Modifiera hello.pl, så att programmet i stället skriver ut texten "Hello, hello, hello, World!".
1.2
Programsatsen print ($mystring) skrivs innehållet i variabeln $mystring ut på skärmen. $mystring kan bytas ut mot ett tal eller en sträng. Skriv en variant av hello.pl, som du ger namnet hello_enrad.pl, och där programmet enbart består av en rad.
1.3
Satsen print ($x , $y) skriver ut två varibler. Skapa ytterligare en variant av hello.pl, där Hello läggs in i en variabel och World i en annan. Skriv ut desssa två varibler i en printsats. Kalla programmet hello_tva_variabler.pl.


2. Standard input ^
# This is my second Perl program, called p1_2.pl
# It's just a simple perl program.
# It's made on Nov. 24, 1996 by Tony Zhang.
$minvar = <STDIN>;
print ($minvar); # print a string to screen

STDIN
I datorsammanhang brukar standard input (STDIN) beteckna tangentbordet, och standard output skärmen. I Perl innebär raden $minvar = <STDIN> att tilldelningen till variabeln $minvar skall ske från tangentbordet. I praktiken innebär det att programkörningen (exekveringen) stannar när den kommer till denna sats. Programanvändaren kan nu skriva ett valfritt antal tecken vid DOS-prompten. När han sedan trycker ner enter-tangente återupptas exekveringen, och variabeln $minvar tilldelas de tecken som användaren just skrivit. Lägg märke till att STDIN skall omges av tecknen < respekive >. Det är inte parenteser, som i printsatsen.

Extra uppgifter
2.1
Skriv ett program (haelsa.pl) där programmet ställer frågan "Vad heter du?", läser in ett namn från tangentbordet och sedan skriver texten "Hej" samt det inlästa namnet.
2.2
Skriv ett program som läser in två textsträngar och skriver ut dem i omvänd ordning. Kalla programmet tvastrang.pl
2.3
Om du vill ha en radmatning när en textsträng skrivs måste du lägga in teckenkombinationen \n, t ex så här: "Detta står på en rad.\nDetta står på nästa rad." Försök att fundera ut ett sätt att skriva ut två inlästa variabler på två olika rader. Döp programmet till rad.pl.


3. Omvandla engelska mil till kilometrar och tvärtom ^
# p2_1.pl
# Omvandling km – miles.
print ("Skriv in den sträcka som skall omvandlas:\n");
$originaldist = <STDIN>;
chop ($originaldist);
$miles = $originaldist * 0.6214;
$kilometers = $originaldist * 1.609;
print ($originaldist, " kilometers = ", $miles, " miles\n");
print ($originaldist, " miles = ", $kilometers, " kilometers\n");

\n
Denna teckenkombination använder du i teckensträngar för att åstadkomma en radmatning. (Se även tidigare uppgiften 2.3.)

chop()
Funktionen chop() klipper bort det sita tecknet i en textsträng. Den används ofta när ett tal matats in från STDIN. En sådan inmatning ger nämligen en textsträng som avslutas med ett nyradstecken (\n). När talet skall användas vid uträkningar bör detta nyradstecken avlägsnas, och detta utför du alltså med hjälp av chop(). Fundera på följande exempel. Ger det en utskrift som lägger ägg, eller ger det en utskrift som kan fyllas med karameller?

$var = "Struts";
chop ($var);
print ( $var);

Aritmetik
På raderna 5 och 6 ser du exempel på aritmetik (matematiska uträkningar). Bägge satserna är tilldelningssatser, och aritmetiken finns till höger om tilldelningstecknet. Det som står till höger om tilldelningstecknet sägs vara "ett aritmetiskt uttryck" och multiplikationstecknet (*) är "en aritmetisk operator". Aritmetiska uttryck kan bestå av variabler, tal och aritmetiska operatorer. Tal brukar man kalla för "numeriska konstanter". Några exempel på aritmetiska uttryck:

2 * 3
2 * 3 / 4
$x + $y
$minvariabel – 8

Som du ser kan man blanda variabler och tal. Man kan även ha flera räknetecken (numeriska operatorer). Oftast ser du aritmetiska uttryck som en del av en tilldelningssats, som i raderna 5 och 6. Följande tilldelninssatser lägger in värdet 8 i varibeln $y, och skriver ut det på skärmen:

$x = 2;
$y = $x * $x +5 – 1;
print ($y);

Utskrift av en lista
Raderna 8 och 9 är exempel på utskrift av listor. En lista är en uppräkning av variabler och/eller strängar. En lista kan även innehålla tal och aritmetiska uttryck. Listans olika delar skiljs åt av komma tecken. Några exempel:

($x, $y)   En lista med två variabler
("Allt kött är hö\n" , "Allt hö är kött")
           En lista med två strängar
( 4, 1000) En lista med tal (numeriska konstanter)
( 2*3 )    En lista med ett aritmetiskt uttryck.
           (Satsen print(2*3); ger utskriften 5.)
( 2, "X", 3, "=", 2*3)
           En lista med tal, strängar och
           ett aritmetiskt uttryck

Extra uppgifter
3.1
Skriv ett program där användaren ombeds att skriva in ett pris. Porgrammet skall sedan räkna ut moms och skriva ut momsbeloppet på skärmen. Kalla programmet moms.pl.
3.2
Utöka programmet så att såväl momsbelopp som priset inklusive moms skrivs ut.
3.3
Skriv ett program som räknar ut hur mycket bensin en bil drar per mil. Programmet skall be om följande uppgifter: körd sträcka och förbrukad bensinmängd. Programmet kan heta bensinforbrukning.pl.
3.4
Skapa ett program som beräknar kostnaden för en bilresa. Följande uppgifter matas in: resans längd i mil, beräknad bensinförbrukning per mil samt bensinpriset per liter.




4. Exempel på if-sats ^
# p2_2.pl

print ("Enter a number:\n");
$number = <STDIN>;
chop ($number);
if ($number) {
print ("The number is not zero.\n");
}
print ("This is the last line of the program.\n");


5. Likhet mellan två tal ^
# p2_3.pl

print ("Enter a number:\n");
$number1 = <STDIN>;
chop ($number1);
print ("Enter another number:\n");
$number2 = <STDIN>;
chop ($number2);
if ($number1 == $number2) {
print ("The two numbers are equal.\n");
}
print ("This is the last line of the program.\n");


6. Exempel med if…else ^
# p2_4.pl

print ("Enter a number:\n");
$number1 = <STDIN>;
chop ($number1);
print ("Enter another number:\n");
$number2 = <STDIN>;
chop ($number2);
if ($number1 == $number2) {
print ("The two numbers are equal.\n");
} else {
print ("The two numbers are not equal.\n");
}
print ("This is the last line of the program.\n");


7. If…elsif…else ^
# p2_5.pl

print ("Enter a number:\n");
$number1 = <STDIN>;
chop ($number1);
print ("Enter another number:\n");
$number2 = <STDIN>;
chop ($number2);
if ($number1 == $number2) {
print ("The two numbers are equal.\n");
} elsif ($number1 == $number2 + 1) {
print ("The first number is greater by one.\n");
} elsif ($number1 + 1 == $number2) {
print ("The second number is greater by one.\n");
} else {
print ("The two numbers are not equal.\n");
}
print ("This is the last line of the program.\n");



8. Exempel med while ^
# p2_6.pl

$done = 0;
$count = 1;
print ("This line is printed before the loop starts.\n");
while ($done == 0) {
print ("The value of count is ", $count, "\n");
if ($count == 3) {
$done = 1;
}
$count = $count + 1;
}
print ("End of loop.\n");