Newsgroup: it.comp.lang.perl
Titolo: Dal C al Perl senza contraccolpi

Salve a tutti,
Sto convertendo i miei programmi CGI, scritti in linguaggio C, in
Perl. Non conosco ancora bene questo linguaggio, e ho un piccolo
problema.
La base di dati è costituita da una serie di file di testo ASCII. Per
mia comodità, ogni riga dei file di testo è costituita da un
Ad esempio, un semplice database con nome e cognome è costituito da un
file di testo così strutturato:
Nome=Mario&Cognome=Rossi&
Nome=Giuseppe&Cognome=Bianchi&
Nome=Paolo&Cognome=Verdi&
Così facendo, praticamente era per me la stessa cosa leggere i valori
da un modulo HTML o da un file. Supponiamo questo modulo HTML:
<FORM METHOD="POST" ACTION="registra.cgi">
Nome: <INPUT TYPE="TEXT" NAME="nome" VALUE="">
Cognome:<INPUT TYPE="TEXT" NAME="cognome" VALUE="">
</FORM>
In linguaggio C usavo la libreria cgi-util per ottenere il nome e il
cognome:
cgiinit();
getentry(cognome, "nome");
getentry(cognome, "cognome");
E poi scrivevo tali dati sul file:
fputs("Nome=", file);
fputs(nome, file);
fputs("&Cognome=", file);
fputs(cognome, file);
fputs("&\n", file);
Facevo così perché poi mi era molto comodo leggere tali valori. Avevo
modificato la cgiinit() della cgi-util.c, realizzando una fileinit(),
funzione simile ma che lavorava su righe di testo e non su input cgi.
Prendeva come parametro una linea di testo, per fare questo:
fileinit(linea);
getentry(nome, "Nome");
Naturalmente "linea" è una stringa che contiene una riga del file.
Ora, voglio fare lo stesso col Perl.
Sto usando la libreria 
cgi-lib.pl
. Uso la funzione &ReadParse(*input)
per leggere l'input, e con $input{'nome'} e $input{'cognome'} ottengo
nome e cognome.
Con print file "Nome=$input{'nome'}&Cognome=$input{'cognome'}&" scrivo
nel file di testo i dati letti dal modulo HTML.
Quello che non so fare è, poi, leggere questi dati nello stesso modo
semplice ed elegante di prima.
Come posso fare?
Grazie in anticipo, se non altro per essere arrivati fin qui :-)
Saluti,
Daniele Franza
<Isauricus>

On Fri, 05 Nov 1999 15:24:36 GMT, 
dan...@franza.net
 (Daniele Franza)
wrote:
:)Sto convertendo i miei programmi CGI, scritti in linguaggio C, in
:)Perl. Non conosco ancora bene questo linguaggio, e ho un piccolo
:)problema.
perche fai cio?
Oha

perche fai cio?
Voglio provare l'ebrezza del perl.
Nessuno mi risponde, perň?
Dai fate i bravi :-)
Mi serve solo sapere questa semplice cosa.
Dato il seguente file di tre righe di testo:
A=uno&B=due&C=tre&
A=due&B=uno&C=tre&
A=tre&B=due&C=uno&
Supponiamo che ho memorizzato in una variabile "var" il valore "due".
Voglio allora prendere il file, scorrere tutte le righe fino a quando
A = var (cioč "due"), e a questo punto fermarmi e memorizzare in altre
due variabili i valori di B e C ("uno" e "tre").
In pseudo codice:
apri file;
while (c'č una riga)
  leggi (una riga del file)
 
  se A = var
    var2 := B;
    var3 := C;
    esci
  altrimenti
    (leggi un'altra riga del file)
Grazie :-)
Saluti,
Daniele Franza
<Isauricus>

 Grazie :-)
Che ne dici di scrivere il tuo primo programma Perl corretto che faccia
esattamente quello che dice il tuo pseudocodice, e poi noi ti diciamo 
cosa c'e' che non va :-)
Dopotutto stai imparando, e Trial & Error e' l'approccio ottimale per
imparare.
Maurizio
-- 
Maurizio M. Munafo' / 
mmmu...@netscape.net
"Consider Phlebas, who was once handsome and tall as you" (T.S.Eliot)

due variabili i valori di B e C ("uno" e "tre").
Ecco qua. Non l'ho provato, potrebbe esserci qualche errore di
sintassi. 
#####
open (MYFILE, "nomefile.txt") or die "Non riesco ad aprire il file!";
while ($line = <MYFILE>) {
  if ($line =! /^A=$var/) {
    (undef, undef, undef, $var2, undef, $var3) = split (/&|=/, $line);
    last;
  }
}
close (MYFILE);
#####
	Michele.
-- 
Michele Beltrame
mi...@io.com
http://www.io.com/~mick/

Ecco qua. Non l'ho provato, potrebbe esserci qualche errore di
Ti ringrazio moltissimo.
Mi sta piacendo 'sto perl: più cose fai/vedi e più ne impari!
Alla prossima :-)
Saluti,
Daniele Franza
<Isauricus>