/ Forside / Teknologi / Udvikling / Perl / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Perl
#NavnPoint
bjarneA 141
poul_from 50
soccer 30
Nicknack 14
Tmpj 0
Begynder, hvad er der galt ?
Fra : Mads Jensen


Dato : 07-02-03 14:50

Hej

#!/usr/bin/perl
print "Content-type: text/html\n\n";

sub splitqs {
read(STDIN, $input,$ENV{CONTENT_LENGTH});
@pairs = split(/&/, $input); // split up the pairs;
foreach $pair (@pairs){
($key,$val) = split(/=/,$pair); // split name and value

$val =~ tr/+/ /; // replace +'s with spaces
$val =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;

$key =~ tr/+/ /;
$key =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;

// return an associative array/hash:
$IND{$key} = $val;
}
}

&splitqs;

print "<html>";
print "\t<head>\n";
print "\t\t<title></title>\n";
print "\t</head>\n";
print "\t<body>\n";
print "\tThis is the output of my first real PERL script:\n";

foreach $name (keys(%IND)){
print "The value of $name was $IND{$name}\n";
}

print "\t</body>\n";
print "</html>";

Har siddet og bakset lidt med dette, men kan ikke rigtig finde fejlen. Får
bare en 500 fejl i hovedet!

PS:
Er der nogen, der kender en god oversigt til det med regex i PERL, da ting
som s/ gi/ osv. er lidt svære at holde rede på

Mange tak for hjælpen på forhånd!

/mads



 
 
Dennis Haney (07-02-2003)
Kommentar
Fra : Dennis Haney


Dato : 07-02-03 15:11

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

"Mads Jensen" <astrup_jensen.NOSPAM@hotmail.com> writes:

> #!/usr/bin/perl
> print "Content-type: text/html\n\n";
>
> sub splitqs {
> read(STDIN, $input,$ENV{CONTENT_LENGTH});
> @pairs = split(/&/, $input); // split up the pairs;
> foreach $pair (@pairs){
> ($key,$val) = split(/=/,$pair); // split name and value
>
> $val =~ tr/+/ /; // replace +'s with spaces
> $val =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
>
> $key =~ tr/+/ /;
> $key =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
>
> // return an associative array/hash:
> $IND{$key} = $val;
> }
> }
>
> &splitqs;
>
> print "<html>";
> print "\t<head>\n";
> print "\t\t<title></title>\n";
> print "\t</head>\n";
> print "\t<body>\n";
> print "\tThis is the output of my first real PERL script:\n";
>
> foreach $name (keys(%IND)){
> print "The value of $name was $IND{$name}\n";
> }
>
> print "\t</body>\n";
> print "</html>";
>
> Har siddet og bakset lidt med dette, men kan ikke rigtig finde fejlen. Får
> bare en 500 fejl i hovedet!

Du kunne jo prøve at kigge i error loggen... Og så ville du finde ud
af at perl ikke bruger // som kommentar tegn... Det er #

> PS:
> Er der nogen, der kender en god oversigt til det med regex i PERL, da ting
> som s/ gi/ osv. er lidt svære at holde rede på

man perlre


- --
Dennis
I have always thought explanations were overkill when correcting
mistakes. A simple "that's wrong" must suffice. I mean, people are
always aware why they are wrong. They just make mistakes to annoy you.
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.0.6 (GNU/Linux)
Comment: Processed by Mailcrypt 3.5.8 <http://mailcrypt.sourceforge.net/>

iD8DBQE+Q75wo6hqeoa8JFgRAjSRAJ0QB5MEZ23BH4NAsL7huMMR9WOQVgCgkl/o
0HZp6Th8eHpSxbUW02HSOG0=
=q9mJ
-----END PGP SIGNATURE-----

Adam Sjøgren (07-02-2003)
Kommentar
Fra : Adam Sjøgren


Dato : 07-02-03 15:31

On Fri, 7 Feb 2003 14:50:02 +0100, Mads Jensen wrote:

> #!/usr/bin/perl

0) Du har ikke slået strict og warnings til.

1) Du bruger ikke relevante moduler.

> print "Content-type: text/html\n\n";
>
> sub splitqs {
> read(STDIN, $input,$ENV{CONTENT_LENGTH});
> @pairs = split(/&/, $input); // split up the pairs;
> foreach $pair (@pairs){
> ($key,$val) = split(/=/,$pair); // split name and value
>
> $val =~ tr/+/ /; // replace +'s with spaces
> $val =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
>
> $key =~ tr/+/ /;
> $key =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
>
> // return an associative array/hash:

2) Du har ikke prøvet at køre programmet på kommandolinien (fanger
syntaksfejl).

> $IND{$key} = $val;
> }
> }
>
> &splitqs;

(3) "&splitqs;" er vist "forældet" syntaks).

> print "<html>";
> print "\t<head>\n";

4) Du bruger en masse print-sætninger.

> print "\t\t<title></title>\n";

5) Der *skal* stå noget i <title> i et HTML-dokument.

> print "\t</head>\n";
> print "\t<body>\n";
> print "\tThis is the output of my first real PERL script:\n";
>
> foreach $name (keys(%IND)){
> print "The value of $name was $IND{$name}\n";
> }
>
> print "\t</body>\n";
> print "</html>";

6) Find selv på flere.

7) Konstruktivt forslag; næsten helt det samme:

== =
#!/usr/bin/perl

use strict;
use warnings;

use CGI;

my $query=new CGI;

my $input=join "\n\t", map { "The value of $_ was " . $query->param($_) } $query->param();

print <<EOT;
Content-type: text/html

<html>
<head>
<title></title>
</head>
<body>
This is the output of my first real PERL script:

$input

</body>
</html>
EOT
== =

CGI.pm er rart - der er ingen grund til at reimplementere dets
funktionalitet.

8) Der er mere end en måde at gøre det på.


Mvh.

Adam

--
"Vi är små citroner" Adam Sjøgren
asjo@koldfront.dk

Søg
Reklame
Statistik
Spørgsmål : 177579
Tips : 31968
Nyheder : 719565
Indlæg : 6409073
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste