Newsgroup: it.comp.lang.perl
Titolo: Scrittura su file tramite script

Se cģč qualcuno che mi puo' aiutare vi ringrazio gią da adesso.
Ho scritto uno srcipt .pl per un server unix che mi permette di visualizzare e
aggiornare una tabella in un semplice file di testo direttamente dal browser.
Provando ad eseguire gli script, quando giunge alla riga dove esegue il comando
"open(a, '<$db')" nei log mi restituisce il seguente errore:
[error] Non apre archivio.dat at
/usr/local/plesk/apache/vhosts/
nomedominio.it/cgi-bin/len.pl
 line 33.
Eppure sono state impostate tutte le permission per gli accessi sugli archivi.
spero che mi possiate aiutare grazie.
-- 
Posted from  [212.171.106.205] 
via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 spero che mi possiate aiutare grazie.
Un errore del genere e` *molto* generico. Prova a dare un:
	open (IN, "$db") die ("Fallita l'apertura di $db:$!\n")
E leggere l'errore completo che ti restituisce perl.
[NB: gli stream nominali sempre in maiuscolo, e se devi aprire un file
in lettura, non c'e` bisogno di mettere redirezioni simil-bash.]
Bye,
 Emmanuele.
-- 
I ... Owe ... You ... Pain! -- Willow, "Tough Love"
Italian Buffy Resource Site (Beta) - 
http://www.ibrs.f2s.com
GnuPG Key ID: 0x788E3A3A
GnuPG Key FP: 4DD0 C90D 4070 F071 5738  08BD 8ECC DB8F A432 0FF4

 	open (IN, "$db") die ("Fallita l'apertura di $db:$!\n")
Dannata sia la fretta (e la mezza influenza):
	open (IN, "$db") || die ("Fallita l'apertura di $db:$!\n");
Sostituire die con warn a piacere.


Grazie di avermi dedicato un po' del tuo tempo.
Ho provato a modificare il codice come mi hai indicato ora l'errore è:
[Tue Sep 25 22:19:59 2001] [error] Fallita l'apertura di archi1.dat:No such
file or directory
sembra che non trovi il file speficato. Nel codice il percorso del file viene
specificato
con un istruzione switch cosi:
SWITCH:
{
($db=$archipath."archi1.dat"), last SWITCH if $w eq "opzione1";
($db=$archipath."archi2.dat"), last SWITCH if $w eq "opzione2";
($db=$archipath."archi3.dat"), last SWITCH if $w eq "opzione3";
($db=$archipath."archi4.dat"), last SWITCH if $w eq "opzione4";
($db=$archipath."archi5.dat"), last SWITCH if $w eq "opzione5";
($db=$archipath."archi6.dat"), last SWITCH if $w eq "opzione6";
($db=$archipath."archi7.dat"), last SWITCH if $w eq "opzione7";
}
a seconda di un parametro passato da un altro cgi. La variabile $archipath
sarebbe
il percorso alla directory che contiene i file, specificata in un setup.cgi la
cui
dichiarazione è:
$archipath="../archivio/";
Non capisco perchè ieri dopo aver modificato la path dei file dati per lo meno
il
tipo di errore era diverso cioè:
(13)Permission denied:
/usr/local/plesk/apache/vhosts/
escama.it/httpdocs/archivio/.htaccess
pcfg_openfile:
unable to check htaccess file, ensure it is readable
ora senza cambiare una virgola mi dice che non riesce più a trovare e ad aprire
il mio file.
Sicuramente mi sta sfuggendo qualcosa ma non riesco a capire.
Se riesci a darmi un'aiuto te ne sarei grato.
michele
miche...@hotmail.com
-- 
Posted from 
h213-48-253.pd1.albacom.net
 [213.213.48.253] 


 il mio file.
Come ti ho detto: controlla che la logica del tuo CGI funzioni. Quello
"switch" la` sopra non mi convince affatto, anche perche' mancherebbe un
"default:" (parlando in C).


 un "default:" (parlando in C).
Cos'ha che non va quello SWITCH?
Per me il problema e' che la cwd del CGI non e'quella che pensi tu, 
tutto qui, prova a sostituire con path assoluti.
-- 
Saluti,
Giancarlo

 tutto qui, prova a sostituire con path assoluti.
Possibilissimo.


 e` un filo piu` semplice da leggere e correggere.
Sara' questione di gusti estetici, ma io trovo piu' "elegante" e 
semplice una struttura tipo quella che una sfilza di elsif, come per 
altro consiglia il Camel book per "emulare" un switch statement.
Invece se parliamo a livello di efficienza e facilita' di manutenzione 
era sicuramente meglio una cosa tipo:
%file= (        'opzione1' => 'archi1.dat',
        'opzione2' => 'archi2.dat',
        'opzione3' => 'archi3.dat',
        .............................................
        'opzioneN' => 'archiN.dat' );
per poi definire
$db=$archipath.$file{$w};
oppure (se le possibili opzioni solo tutte nella forma "opzioneX" e i 
file archiX.dat):
$w=~/opzione(\d+)/;
$db=$archipath.'archi'.$1.'.dat';
-- 
Saluti,
Giancarlo

         'opzioneN' => 'archiN.dat' );
Un hash e` certamente il modo piu` bello, ma non il modo piu` efficiente
per fare una cosa del genere. Un hash alloca piu` memoria della somma di
tutte le sue parti. Ma si scende nelle questioni di lana caprina...


Ok, vi ringrazio per il volstro aiuto, purtroppo non entro in merito a quale
sia la forma piů elegante per scrivere uno script, anche perchč dal basso delle
mie conoscenze non sarei la persona indicata.
Quello che importa č che funziona anche cosě. Di nuovo grazie.
Solo problema non meno grave dopo tutto questo gran lavorare č che ne mio
browser quando vengono eseguiti gli script, nel momento in cui dovrebbe
visualizzarmi il contenuto del file di testo in una tabella,
non mi visualizza subito il risultato ma devo aggiornare la visualizzazione del
browser (intanto sto lavorando con ie 5) fino a quando sembra che i dati
vengono recepiti completamente e allora mi visualizza sta benedetta tabella.
Pero' la prima volta sembra quasi che si perda qualche cosa per strada. 
Puo' dipendere dal server ospitante ?
Vi ringrazio ancora e spero che possiata aiutarmi. 
-- 
Posted from  [212.171.106.223] 
