webForumDet fria alternativet

Nybörjarhjälp

2 svar · 269 visningar · startad av pennypacker

pennypackerMedlem sedan mars 200291 inlägg
#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.

JojoxxMedlem 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>
pennypackerMedlem sedan mars 200291 inlägg
#3

Tusen tack för hjälpen!

124 ms totalt · 3 externa anrop · v20260731065814-full.2b84b982
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
122 ms — hämta tråd, inlägg och bilagor (db)