Gå til innhold

Hvordan er GET metoden i Perl?


Anbefalte innlegg

Heisann. Jeg har fikla litt med Perl, og kom fram til at jeg ville lage en liten "hjemmeside" hvor man kun trykke "Litt om meg" og "Hva er Perl".

Meningen da er at jeg ved hjelp av GET metoden skal lage en liten "hjemmeside".

Dette er jo da en bitteliten script for å lære meg GET metoden i Perl.

 

Jeg har prøvd litt selv:

 

#!c:/perl/bin/Perl.exe 
print "Content-type: text/html; charset=iso-8859-1\n\n";

use LWP::Simple;
$action = get("http://localhost/cgi-bin/arraytest.py");

print "<a href=\"arraytest.py?action=litt_om_meg\">Litt om meg</a><br />";
print "<a href="arraytest.py?action=hva_er_perl\">Hva er Perl</a><br />";

if ($action == "litt_om_meg") {
 print "Litt om meg...";
} elsif ($action == "hva_er_perl") {
 print "Perl er noe";
} else {
 print "Velkommen til testscriptet";
}

 

Men uten hell. Det eneste jeg får fram er "Litt om meg".

 

Så spørsmålet er; hvordan er GET metoden i Perl? Hvordan tar jeg i bruk det?

Lenke til kommentar
Videoannonse
Annonse

"GET" metoden eller "get" metoden for å være helt nøyaktig (en fordel, siden perl skiller på store og små bokstaver) som du forsøker å benytte kommer fra modulen LWP::Simple og benyttes til å hente ned web-sider (urls).

 

e.g.

use LWP::Simple;
my $data = get('http://www.vg.no');
   #Dumper ut HTML-kode til skjerm
print $data;

 

Testen:

if ($action == "litt_om_meg") {

..

}

 

vil alltid være sann (dvs kode i løkke kjøres) fordi "==" operator er "numerisk sammenligning", og strings tolkes alltid som sanne. Bruk "eq" operator dersom du vil sammenligne to strenger (dvs tekst).

 

Ellers i scriptet ditt er det ikke helt klart hva du forsøker å gjøre. Du printer ut HTML-kode for to linker. I den ene linken har du href-attributt satt til:

"arraytest.py?action=litt_om_meg"

 

Dette betyr at browser vil forsøke å åpne opp dette dokumentet idet link blir trykket på. If-testene nederst i script vil kjøres med en gang og har ingenting med linkene å gjøre. I beskrivelsen av hva du ønsker å gjøre, høres det ut som alt vil gjøre kan gjøres med HTML.

Lenke til kommentar

get() fra LWP::Simple brukes for å hente ned innhold fra nettsider...

 

Jeg gjetter at du kun ønsker å sjekke hva som står etter action= i adressefeltet?

 

isåfall skal du bruke CGI modulen! Det er mange måter å bruke den på, f.eks slik:

 

use CGI;

my $cgi  = new CGI;

print $cgi->header;

my $action = $cgi->param('action');
# nå har du $action med innhold utfra hva som står i URL

 

[/code]

Lenke til kommentar

Takker for svarene, har fått det hele til nå.

 

Koden jeg skrev var den Torbjørn skrev, samtidig som jeg også fikk lagt til andre variabler, slik at jeg kunne skrive arraytest.pl?action=hello_world&annetvariabel=annetverdi, og slik kunne GET metoden fortsette. Genialt :)

Lenke til kommentar
  • 4 uker senere...

Du mangler to essensielle linjer i scriptet ditt:

 

use strict;

use warnings;

 

Legg dem nest øverst, under #! - linja.

 

use warnings vil føre til at perl klager når du gjør noe galt - sånn som her, da du har brukt == når du skal bruke eq.

 

Use strict gjør at du MÅ deklarere variablene dine: "my $varname'.

Lenke til kommentar
Jeg får også litt angst over at det er en print over en use... Liker det best om alle use er samlet øverst under #! - linja.

 

use strict;

use warnings;

 

use ....

5708697[/snapback]

 

Hvor "use" befinner seg er irrelevant, da disse blir utført årevis før resten av koden kjøres.

Lenke til kommentar

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...