webForumDet fria alternativet

Nybörjarhjälp

Perl & Ruby

2 svar · 272 visningar · startad av pennypacker

Medlem sedan mars 200291 inlägg
Frågan#1

Jag är helt färsk på det här med Perl och skulle behöva lite hjälp.

Jag ska göra ett Perl-script som plockar fram environment-variablerna för den besökande användaren, detta vill jag sedan presentera i en tabell i ett html-dokument.

Min kod ser ut som följer:

#!/usr/bin/perl

print "Content-type: text/html\n\n";

open (HTML, "<tabell.html");
foreach $key (sort(keys %ENV)) {
$namn = $key;
$varde = $ENV{$key};
}

      while($row = \<HTML\>) {
     	$row =\~ s/---(.\*?)---/eval $1/eg;
      	$row =\~ s/---(.\*?)---/eval $2/eg;
      	print "$row";
     }

Tabell.html ser ut såhär:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>
1c
</title>
</head>

<body>

\<h1\>
  Användaruppgifter
\</h1\>
\<table border="1"\>
  \<tr class="b1"\>
    \<td\>
          Namn
        \</td\>
        \<td\>
          Värde
        \</td\>
      \</tr\>
      \<!---xxx---\>
      \<tr\>
        \<td\>
          \---$namn---
        \</td\>
        \<td\>
          \---$varde---
        \</td\>
      \</tr\>
      \<!---xxx---\>
\</table\>

</body>
</html>

Problemet är att jag inte vet hur jag ska loopa i perl-scriptet för att alla environment-variabler ska skrivas ut i html-dokumentet. Som det är nu skrivs bara en förekomst av vardera $namn = $key; och $varde = $ENV{$key}; ut i tabellen.

Går detta att förstå?

Tacksam för hjälp.

Medlem sedan juni 20004 308 inlägg
#2

Eftersom du först loopar igenom hela hashen $ENV och hela tiden ersätter variablerna $namn och $varde så blir det bara den sista som används. Sedan skall du i största möjliga mån låta bli att använda eval, speciellt när data du skickar till det kommer från externa källor. Du vet inte vilka hemska kommandon som kan komma att köras av ditt script (säkerhetslucka).

Så här kan scriptet se ut, hoppas att det är självförklarande:

#!/usr/bin/perl 

print "Content-type: text/html\n\n"; 
open (HTML, "<tabell.html"); 
$html=join('',<HTML>);
foreach $key (sort(keys %ENV)) { 
	$row="<tr><td>$key</td><td>$ENV{$key}</td></tr><!---xxx--->";
	$html =~ s/<!---xxx--->/$row/eg; 
} 
close(HTML);
print $html;

och tabell.html lite ändrad;

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> 
<title> 
1c 
</title> 
</head> 

<body> 

<h1> 
Användaruppgifter 
</h1> 
<table border="1"> 
<tr class="b1"> 
<td> 
Namn 
</td> 
<td> 
Värde 
</td> 
</tr> 
<!---xxx---> 
</table> 

</body> 
</html>
Medlem sedan mars 200291 inlägg
#3

Tusen tack för hjälpen!

258 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
127 ms — deklarationer (db)
0 ms — hämta statistik (cache)
124 ms — hämta tråd, inlägg och bilagor (db)
131 ms — ändringar (db)