Newsgroup: it.comp.programmare
Titolo: CONOSCI IL PERL? ALLORA AIUTAMI E TI REGALO UNA POESIA ;)

Ciao, se mi aiuti a risolvere un mio piccolo problema su uno script in perl,
ti regalo una poesia, che ne dici? :)))
dunque, questo scritp dovrebbe copiare il contenuto di un file su un altro
file, quando questi due files si trovano nella stessa directory non ci sono
problemi....mahhh, il problema comincia a sorgere quando il file su cui si
vuole copiare il contenuto č presente in un altra directory!
Come di certo saprai quando ti connetti tramite FTP per aggiornare le tue
pagine Web ti ritrovi subito sotto la directory principale dove sono
presenti tutte le tue cartelle ed i tuoi files, ad esmpio:
images
cgi-bin
rubrica
index.htm
main.htm
logo.gif
supponiamo che io ho il file "dati.txt" sotto la directory "cgi-bin" ed il
file "rubrica.xml" nella directory "rubrica"
ora...utilizzando lo script che ho creato "add.cgi" presente nella directori
"cgi-bin" dovrebbe leggere il contenuto del file "dati.txt" che si trova
nella stessa directory e poi copiarne il contenuto nel file "rubrica.xml"
che si trova sotto la directory "rubrica"!
eseguendo lo script non riesce a trovare il file rubrica.xml. Forse perche
ho sbagliato a scrivere il percorso.
domanda: come fare per specificare il percorso corretto del file
"rubrica.xml"?
vi riporto il mio script, dove avrņ sbagliato?
#!/usr/bin/perl
print "Content-type:text/html\n\n";
$file1 = "dati.txt";
$dir = "/rubrica";
$filex = "rubrica.xml";
$file2 = $dir . $file 2;
open(a, "<$file1") or die print "Non apre dati.txt";
open(b, ">$file2") or die print "Non apre rubrica.xml";
while($riga=<a>){
print b $riga;
}
print"copia effettuata";
close(a);
close(b);
Risolvimi il problema e vinci la poesiola, magari da dedicare alla tua
fidanzata o mogliettina. ciao

vi riporto il mio script, dove avrò sbagliato?
Non saprei proprio, il perl non lo so, ma io lo scriverei cosi':
#!/usr/bin/perl
print "Content-type: text/plain\r\n\r\n";
$file1 = "dati.txt";
$dir = "../rubrica/";
$filex = "rubrica.xml";
$file2 = $dir . $filex;
open(a, "<$file1") or die print "Non apre dati.txt";
open(b, ">$file2") or die print "Non apre rubrica.xml";
while($riga=<a>){
print b $riga;
}
print "copia effettuata";
close(a);
close(b);
Teòria
-- 
(unprotect to reply by mail)

fidanzata o mogliettina. ciao
	I gave her poems to say
	with her own name there
	and her long, dark hair
	like clouds over fields
	  	        [in May ;-)
Leonardo
-- 
".signature": bad command or file name





Allora:
Come ha già segnalato Leonardo dovresti scrivere
$file2 
= "$dir/$filex";
e non
$file2 = $dir . $file 2;
In ogni caso ti 
sconsiglio di utilizzare i percorsi relativi per accedere ai
file. La 
variabile d'ambiente DOCUMENT_ROOT ti permette di ottenere
l'effettivo 
percorso fisico alla tua cartella sul server.
Ecco lo script con qualche 
modifica
#!/usr/bin/perl
print 
"Content-type:text/html\n\n";
$file1 = 
"$ENV{'DOCUMENT_ROOT'}/cgi-bin/dati.txt";
$file2 = 
"$ENV{'DOCUMENT_ROOT'}/rubrica/rubrica.xml";
open(a, "<$file1") or die 
print "Non apre dati.txt";
open(b, ">$file2") or die print "Non apre 
rubrica.xml";
flock(b,2); #è meglio bloccare il 
file...
while($riga=<a>){
print b $riga;
}
print"copia 
effettuata";
close(a);
flock(b,8);
close(b);
Spero che 
questo ti possa essere utilie.
Ciao.
Sebastian Garcia.
www.sebastian.it