Perl & CGI prov 981215
Rudbeck Komvux Webbproducentutbildning
Veronica Mårtensson wpdjan98
18-29 Godkänt
30-41 Väl godkänt
42-51 Mycket väl godkänt
#nyFunktion1();I ett perl-program ska man lägga till texten "hej" till en skalär variabel. Vilket av nedanstående är ett riktigt sätt att göra det på?
2) $variabel = $variabel + "hej";
I ett HTML-formulär används FORM-taggen för att tala om med vilken metod som data sänds från formuläret till CGI-scriptet. Det finns två metoder, en av dessa används nedan. Vilken av dessa är rätt:
3)
<FORM ACTION="/cgi-bin/prog.pl" METHOD="POST">
I ett CGI-program ska man hämta data från ett formulär som anropar CGI-programmet med metoden GET. Formuläret använder följande FORM-tag:
<FORM ACTION="/cgi-bin/prog.pl" METHOD="GET">
Informationen som programet behöver för att kunna läsa in data kommer från tre olika källor, vilka? Endast ett av nedanstående alternativ är rätt:
4) Miljövariablerna CONTENT_TYPE, QUERY_STRING och PATH_INFO
Ett HTML-formulär ska innehålla dold extrainformation som inte ska synas på websidan, men som ska tas emot av ett CGI-program när formulärets innehåll sänds in till webservern. Vilken av dessa HTML-taggar kan användas till det?
<INPUT TYPE="HIDDEN" NAME="HIDDEN" VALUE="Extra">
Ett HTML-formulär ska innehålla en kontroll som ser till att formulärets innehåll sänds in till webservern. Vilken av dessa HTML-taggar kan användas till det?
<INPUT TYPE="SUBMIT" NAME="REGISTRERA" VALUE="Registrera">
Du bygger websidor åt en kund som vill använda CGI för att ta emot inmatning från sina websidor. På webhotellet finns en färdig CGI som gör precis det du behöver för att ta emot inmatningen. Kunden har hittat en formulärsida på nätet som ser precis ut som han vill ha det. Vad är lämpligt att ändra för att formuläret och CGIn ska fungera tillsammans?
Namnen på formulärets input-taggar
Du skriver ett CGI-program som ska användas som web-gränssnitt till ett gammalt, administrativt program. Inmatningen till programmet kommer från ett formulär. Vad får du inte göra som kan äventyra säkerheten i systemet?
Anropa det gamla programmet från CGI-programmet
Du ska modifiera ett CGI-program skrivet i perl genom att lägga till egen programkod. Du tänker skriva din egen kod i separata funktioner för att slippa ändra mer än nödvändigt i den befintliga koden. När du anopar en funktion som du skrivit som heter nyFunktion1 så skriver du så här:
skriver ett perl-program som ska spara en text i en fil. På vilket sätt kan du göra det?
open(MINFIL, "minfil.txt"); print $enText MINFIL; close(MINFIL);
Du läser ett perlprogram som innehåller följande sats:
$in =~ /Adam/Eva/g;
Vad gör satsen?
Byter alla förekomster av namnet Adam mot namnet Eva i $in
- I frågan ges enstaka, felaktiga satser i perl, med tillhörande felmeddelande från perl-tolken (när man kör med perl -w). Ringa in och beskriv felet.
I ett perl-program ska man lägga till talet 17 till en skalär variabel. Det är dock ett fel i koden:
$variabel = $variabel
++ 17;Felmeddelandet man får när man försöker köra programmet är:
Number found where operator expected at fel.pl
line 2, near "++ 17" (Missing operator before 17?)
syntax error at fel.pl line 2, near "++ 17"
Execution of prog.pl aborted due to compilation errors.
Ringa in och beskriv felet.
Fel: ++ används för att öka värde vid association och inte till att tilldela ett värde
. I stället skulle bara ett + använts.I ett perl-program ska man duplicera ordet kalle 17 gånger. Det är dock ett fel i koden:
$variabel = "kalle"
% 17;Felmeddelandet man får när man försöker köra programmet är:
Argument "kalle" isn't numeric in modulo at junk.pl line 1.
Ringa in och beskriv felet.
Fel: "kalle" är inte ett numeriskt värde utan en sträng. Modulus används för att få rest vid division. Division kan ej utföras med strängar. Istället skulle % byts ut mot x.
I ett perl-program ska man jämföra två texter. Det är dock ett fel i koden:
if ($a
eg "kalle") {Felmeddelandet man får när man försöker köra programmet är:
Bareword found where operator expected at
junk.pl line 1, near "$a eg"
(Missing operator before eg?)
Unquoted string "eg" may clash with future reserved word at line 1.
syntax error at junk.pl line 1, near "$a eg "
String found where operator expected at line 1, near "eg "kalle""
(Do you need to predeclare eg?)
Execution of junk.pl aborted due to compilation errors.
Ringa in och beskriv felet.
Fel: eg är felstavat skall vara eq som står för, om $a är lika med "kalle" skall kalle skrivas ut.
En programmerare har skrivit ett perl-"program" på bara en rad för att testa hur man använder associativa arrayer. Det är fel i denna rad:
%variabel = qw(Anna Bertil Cilla);
Felmeddelandet man får när man försöker köra programmet är:
Name "main::variabel" used only
once: possible typo at junk.pl line 1.
Odd number of elements in hash assignment at junk.pl line 1.
Ringa in och beskriv felet.
Fel: man tilldelar inte sina värden till en ass. Array på detta vis. Utan man tilldelar först sina värden genom att använda keys, sedan kan funktionen ovan returnera en lista av sina värden.
I ett perl-program ska man kontrollera om ett namn är Arne. . Det är dock ett fel i koden:
if ($variabel ne 'Arne') {
print "skild\n";
Felmeddelandet man får när man försöker köra programmet är:
syntax error at junk.pl line 3, near
"else"
Execution of junk.pl aborted due to compilation errors.
Ringa in och beskriv felet.
Fel: det måste vara en avslutande krullparentes innan else annars så förstår inte Perl vad
den skall göra.
I frågan ges enstaka, felaktiga satser i perl _utan_ tillhörande felmeddelande. Ringa in och beskriv felen, det ska räcka med två-tre ords beskrivning. Du behöver inte rätta felen, bara tala om vad som är fel..
I ett perl-program ska man lägga till talet 17 till en skalär variabel. Det är dock ett fel i koden:
$variabel
=+ 17;Ringa in och beskriv felet.
Fel: + och = skall byta plats
I ett perl-program ska man läsa in text från användaren till en lista. Inläsningen fungerar inte.
@inputLines =
[STDIN];Ringa in och beskriv felet.
Fel: inga hakparenterser, använd <> istället.
I ett perl-program ska man skriva ut ett hälsningsmeddelande till användaren. Utskriften kommer aldrig ut.
Ringa in och beskriv felet.
Fel: STDIN skall bort.
I frågan ges ett kort avsnitt perlkod samt en beskrivning av vad den givna koden gör. Uppgiften är att förklara hur koden ska ändras om beskrivningen ändras på ett visst sätt.
När körningen av ett perlprogram kommer till nedanstående avsnitt av programkoden så innehåller listan
@namn följande fem namn:('Anna', 'Bertil', 'Cilla', 'David', 'Eva')
Koden ser ut så här:
For($i;$i<$#namn;$i++){
if($namn[$i] =~ /\w\w\w\w/){
print "$namn[$i]\n";
}
}
När koden körs så skrivs de namn ut som innehåller minst fyra bokstäver, resultatet blir alltså:
Anna
Bertil
Cilla
David
Tala om hur programkoden ska ändras för att endast namn som innehåller bokstäverna
l eller v ska skrivas ut.@namn = qw(anna bertil cilla david eva);
for ($i; $i<$#namn; $i++) {
if ($namn[$i+1] =~ /[lv]/) {
print "$namn[$i+1]\n";
}
}
Hur skulle du göra för att räkna antalet argument som skickas till en subrutin. Du behöver inte skriva programmet som gör det bara beskriva i princip hur du skulle göra.
Svar: jag skulle titta i subrutinen. Argument är
det samma som parametrar. Om man vill ha en
eller flera element utskrivna måste man anropa parametrar. Jag skulle då räkna de
anropade
parametrarna i koden efter tex en print funktion eller en my funktion med efterföljande
@_
eller hade jag fått en utskrift redan med ett antal ord eller siffror som skall göras
något med och
vetat att det låg en subrutin bakom så hade jag kunnat räkan orden eller siffrorna som
skall göras
något med (ej resultatet) och skulle på så vis få fram hur många argument som skickas
till subrutinen.
Det finns ett CGI-program på en webserver som anropas med URL:en
http://programmera.cgi.nu/cgi-bin/prog.pl
Programmet används för att mata in namn och adress till ett medlemsregister. Om Lars Alm har adressen Banvägen 14, 119 82 Rullmora så ska indata till CGI-programmet se ut så här när det tas emot från formuläret:
Namn=Lars+Alm&utdeladr=Banv%E4gen+14&postnr=119+82&ort=Rullmora&submit=Registrera
Beskriv hur HTML-koden för ett sådant formulär ska se ut. Formuläret ska ligga på samma server som CGI-programmet.
<html>
<head>
<title>Medlemsregister</title>
</head>
<body>
<form action=prog.pl method="post">
Namn: <input name="Namn" type=text size=30><br>
Adress: <input name="utdeladr" type=text size=30><br>
Postnr: <input name="postnr" type=text size=10><br>
Ort: <input name="ort" type=text size=15><p>
<input type=submit name="submit" value="Registrera">
</form>
</body>
</html>
Jag hann inte denna uppgift.
God Jul på dig Torbjörn önskar Veronica!