Newsgroup: it.comp.lang.perl
Titolo: Non capisco cosa sbaglio ..

Ciao a tutti .. sono un nuovo del perl .. ma questo dovrebbe essere
banale, ma non mi va! Allora.. mando un semplice form da HTML con metodo
POST come segue:
<form action="indirizzo del mio cgi" method="POST">
    nome:       <input type="text" name="nome"><br>
    email:      <input type="text" name="email"><br>
    età:        <input type="text" name="età"><br>
    indirizzo:  <input type="text" name="colore_preferito"><br>
                <input type="submit" value="Invia"><br>
                <input type="reset" value="Resetta"><br>
</form>
Voglio semplicemente che il cgi visualizzi i campi formattati su pagina
web (lo so, lo so ... cosa da pag.3 del manuale di perl!) ... uso questo
cgi:
#!/usr/bin/perl
print "Content-type:text/html\n\n";
read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
@coppie = split(/&/, $buffer);
foreach $pair (@coppie) {
($nome, $valore) = split(/=/, $coppia);
$valore =~ tr/+/ /;
$valore =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$HASH{$nome} = $valore;
}
print "<html><head><title>Form
Output</title></head><body>";print "<h2>Risultati del form</h2>\n";
foreach $key (keys(%HASH)) {
print "$key = $HASH{$key}<br>";
}
print "</body></html>";
Risultato: non mi visualizza NULLA. Non dà errori,ma in pratica riceve
un QUERY_STRING vuoto. Se uso GET invece di POST funziona invece, solo
che devo usarlo per dati di tipo password, quindi non posso usare il
GET. AIUTOOOOOO!
Grazie in anticipo a tutti. Fabrizio

 ($nome, $valore) = split(/=/, $coppia);   <--- qui $coppia


 use strict;
Mmmm ... ho aggiunto "use strict", ma mi dà il solito odioso errore :((
Devo fare altri cambiamenti?
Grazie mille in anticipo :)
Internal Server Error
The server encountered an internal error or misconfiguration and was
unable to complete your request.
Please contact the server administrator, 
webm...@xxx.net
 and inform
them of the time the error occurred, and anything you might have done
that may have
caused the error.

Tutto risolto .. ce l'ho fatta ..
Grazie mille :))
Per chi fosse interessato ecco il codice:
#!/usr/bin/perl
print "Content-type:text/html\n\n";
if ($ENV{'REQUEST_METHOD'} eq 'POST')
{
read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); }
else { $buffer = $ENV{'QUERY_STRING'}; }
@pairs = split(/&/, $buffer);
foreach $pair (@pairs)
{ ($name, $value) = split(/=/, $pair);
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$value =~ s/\0//g;
$value =~ s/\.\.//g;
$value =~ s/(\|)/\\$1/g;
$FORM{$name} = $value;
}
Grazie a tutti comunque per l'aiuto.
PS.
La soluzione finale l'ho avuta grazie all'aiuto di una persona del canale
#cgi di undernet, ci tenevo a dirlo per correttezza (inzomma .. come dire
.. non č farina del mio sacco :))))
Grazie di nuovo. Bye

 Devo fare altri cambiamenti?
Attento. Se usi "use strict", ogni variabile deve essere introdotta con 
'my' oppure dichiarata mediante 'use vars LIST'.
Nel primo caso crei variabili con scope lessicale, nel secondo caso
varibili globali.
Il mio suggerimento è usare *SEMPRE* "use strict" e dichiarare tutte le
variabili con 'my'. 
Ricordati che quando vige "use strict" tutte le variabili, ma proprio
tutte, devo essere dichiarate, anche, in particolare, quelle usate come
iteratori nelle istruzioni for, foreach.
Quindi, questo non compila...
 
 foreach $pippo( LIST ) { ...
...a meno che tu non abbia gia dichiarato $pippo, cosa che puoi anche fare
nell'ambito dell'istruzione foreach stessa:
 foreach my $pippo( LIST ) { ...
 
Max

 > ($nome, $valore) = split(/=/, $coppia);   <--- qui $coppia 
                                              ^^^^^^^^^^^^^^^^^^^^^^^^^
                                      eccolo l'errore che avevo marcato
forse una lettura piu' attenta (un po di accapi in mezzo al
codice avrebbero aiutato) aiuta a evitare errori :)