Newsgroup: it.comp.lang.perl
Titolo: Sto impazzendo!

Il problema è questo: ho uno script '
script.pl
' che è pieno di cose del
tipo:
print $uno;
print $due;
ecc.ecc.
Il fatto è che tale script deve (o almeno dovrebbe) andare a leggersi
cos'è $uno, $due e compagnia bella su un altro file, supponiamo si
chiami '
script2.pl
' e che stia nella stessa directory. Sono ore che
provo a farglielo capire ma non c'è via!
Qualcuno ha qualche dritta illuminante?
Ciao
Edo

 ecc.ecc.

Con due righe di codice inutile? Devo tirare fuori la mia sfera di cristallo!
A caso ti direi di fare 
do '
script2.pl
';
ma se ho azzeccato, non chiedermi i numeri del superenalotto.
Maurizio
-- 
Maurizio M. Munafo' / 
mmmu...@netscape.net
"Consider Phlebas, who was once handsome and tall as you" (T.S.Eliot)

 ma se ho azzeccato, non chiedermi i numeri del superenalotto.
ci provo io: 85 1 12 20 64 91
puntate almeno 100 milioni, ne vale la pena. L'informazione è "sicura"!
:-) antonio

 Con due righe di codice inutile? Devo tirare fuori la mia sfera di cristallo!
Adesso mi spiego meglio, anche se mi sa che non ti dirò molto di più!
Allora, ho uno script (
script.pl
) nel quale ci sono alcuni "print" in
inglese: quello che voglio è rendere questo script "multilingue",
preparando un menu dal quale l'utente può scegliere che lingua
utilizzare. Quindi, oltre al file vero è proprio, avrò, ad esempio, un
file 
eng.pl
, uno 
ita.pl
 e così via. In questo modo, il file 
script.pl
non può avere print "Ciao\n";, bensì avrà qualcosa come print $uno, e, a
seconda che l'utente abbia scelto la lingua, il valore di $uno sarà
letto da 
eng.pl
 o 
ita.pl
, diventando hello in un caso e ciao nell'altro.
La domanda era: come faccio a fare in modo che 
script.pl
 vada a leggersi
i valori in un altro file? Ho provato con open() ma senza successo!
Ciao
Edo

 i valori in un altro file? Ho provato con open() ma senza successo!
Io ho risposto esattamente a questa tua domanda. Ma l'hai provata la
risposta che ti avevo dato?
Devi fare 
 do '
ita.pl
';
dove 
ita.pl
 contiene:
 $uno = "Ciao";
 $due = "Arrivederci";
 ....
Dettagli (per quanto possano essere necessari) in perlfunc (alla voce 'do').


 puntate almeno 100 milioni, ne vale la pena. L'informazione è "sicura"!
Secondo me quel 91 farà moooooooolta fatica ad uscire!!!!
Edo che magari prova con 19 invece che 91!

  ....
Dici che si potrebbe fare qualcosa con open? (io chiedo ...!)


perché, cosí credi di fare sei?
comunque se non ti fidi, non giocare, non sei mica obbligato.
io tutti i miei risparmi (più qualche debito) li punto su quella
combinazione... e chi se ne frega se qualcuno dice che il 91 non uscirà
mai!
:-)))) antonio
PS: scusate l'OT :-))))))))))))))))))))

e se tu facessi da un lato dei files del tipo
default.txt
UNO=ciao
DUE=buongiorno
TRE=arrivederci
eng.txt
UNO=hello
DUE=goodmorning
ita.txt
UNO=salve
TRE=au revoir
e poi nel tuo script vero e proprio usi un hash utilizzabile cosí
$ita{'UNO'} $ita{'DUE'} ecc.
$eng{'UNO'} $eng{'DUE'} ecc.
i quali vengono riempiti leggendo i files default.txt, ita.txt, eng.txt
in quel caso open() funziona di nuovo (ed ha anche un senso)
chiaramente lo abbini ad uno split('=' ...) per estrarre nome di
variabile e valore della variabile. il tutto diventa multilingue (n>2)
se nomi di files e nomi di hash coincidono (guarda caso anche con le
scelte possibili dal menu)
ciao, antonio
PS: mi hanno comunicato i nuovi numeri per prossimo sabato: 
85 126 2 0 15 91 
capisco che il '91' non ti piace, ma non è colpa mia se me li danno cosí
:-)


 scelte possibili dal menu)
Scusa, ma se devi riempire un hash, perche' mai usare hash con nome diverso
per ogni linguaggio? Per complicarsi la vita? Se per caso si dovessero usare
piu' linguaggi nella stessa sessione, al limite conviene usare un unico hash
di hash.
  print $message{$language}{UNO};
altrimenti un semplice
 print $message{UNO};
dovrebbe bastare, ovviamente a patto che %message sia inizializzato in accordo
al linguaggio selezionato.


 piu' linguaggi nella stessa sessione, al limite conviene usare un unico hash di hash.
+++++
Hai perfettamente ragione Maurizio, ma io non avevo nessuna voglia di
complicare ulteriormente la cosa, visto che non sapevo se ad Edo piaceva
il tipo di soluzione.
Domanda ad Edo: perché hai pensato alla soluzione di diversi file
scriptXY.pl da includere?
ciao, antonio


 Dici che si potrebbe fare qualcosa con open? (io chiedo ...!)
Facci vedere lo script completo (o almeno ridotto al minimo) e i file che
cerchi di leggere.
Grazie.


 A me si. Quindi c'e' qualche problema a monte.
Adesso funziona anche a me ... ma non ti dico perchè prima non
funzionava .... c'è da vergognarsi!
Grazie 1000!
Edo

 wrote:
Adesso ho dei casini andando avanti con lo script: funziona il do, solo
che essendo lo script diviso in 3 files, mi funziona solo sul primo, e
appena passo al secondo non riesce più ad andare a leggere le
definizioni in 
ita.pl
.
Mi spiego meglio: ho il primo script, 
script.pl
 per capirci, dal quale
prendo la scelta dell'utente che deve appunto scegliere quale linguaggio
utilizzare; supponiamo che scelga l'italiano, quindi dopo la porzione di
codice che chiede di scegliere la lingua, ho il do '
ita.pl
'; e fin qui
no problem. Lo script va avanti, continuando ad attingere da 
ita.pl
finchè 
script.pl
 giunge ad un bivio: si può scegliere se passare a
script2.pl
 o a 
script3.pl
; e qui nasce il caos: una volta lanciato uno
di questi due, questo (ovviamente) non legge più da 
ita.pl
 che, per la
cronaca, contiene anche le definizioni per 
script2.pl
 e 
script3.pl
.
Io avevo pensato a 2 cose: riproporre il menu di scelta del linguaggio
seguito dal do (anche se come soluzione mi sembra bruttina!) opure
scrivere in un file temporaneo la scelta del linguaggio, che poi
script2.pl
 e 
script3.pl
 andranno a leggersi e lanceranno nuovamente il
do con il file appropriato.
Solo che nessuna delle 2 mi piace! Avete qualche idea migliore?
Ciao
Edo

 cronaca, contiene anche le definizioni per 
script2.pl
 e 
script3.pl
.
Come fai a dire che non lo legge piu'? 
Ti ripeto: facci vedere un esempio di cosa non funziona (e del risultato che
ti aspetteresti), magari postando una versione ridotta dei tuoi script, 
in cui sia possibile riprodurre l'errore/problema.


 in cui sia possibile riprodurre l'errore/problema.
Ridotto all'osso, il primo č:
 
print "choose a language
[1] ENG
[2] ITA\n";
chomp($lang=<STDIN>);
if ($lang eq '1') {
	do '
eng.pl
' # Come mi avevi consigliato in precedenza
} elsif ($lang eq '2') {                                                                                                                                       
         do '
ita.pl
'
}                                                                                                                                                              
A questo punto lo script va avanti regolarmante, e se ad esempio ho
print $definizione1;
 
va nel file 
ita.pl
 o 
eng.pl
 a vedere cos'č $definizione1.
Alla fine lo script si chiude con qualcosa del tipo:
print "Vuoi fare questo o quello?
[1] questo
[2] quello\n";
chomp($scelta=<STDIN>);
if ($scelta eq '1') {
	system("perl ./
questo.pl
")
} elsif ($scelta eq '2') {                                                                                                                                     
        system("perl ./
quello.pl
")
}                                                                                                                                                			            
A questo punto, ovviamente, non mi legge piů 
ita.pl
 o 
eng.pl
. Ho anche
provato a mettere un ulteriore blocco if/elsif sotto ad ogni system che
si legga il valore di $lang ma, visto che in pratica l'esecuzione si
blocca e riparte con un altro file, $lang viene dimenticata e non
succede quello che speravo! Per questo avevo intenzione di scrivere il
valore di $lang in un file temporaneo, e mandare ogni script a:
1) vedere se questa esiste
2) in caso positivo, leggerla e fare un do con il file appropriato.
Ma credo che ci siano soluzioni piů "alla mano", no??
Ancora grazie
Edo
P.s: la prima volta che ti incontro ti offro un tal birrone da star male 20
giorni!!						    

 Ma credo che ci siano soluzioni piů "alla mano", no??
Si. Parecchie.
1) Questo.pl o 
quello.pl
 possono essere delle subroutine, eventualmente 
  contenute in un modulo da 'usare' all'inizio del tuo programma.
2) 
questo.pl
 o 
quello.pl
 possono prendere parametri dalla riga di comando,
  per cui puoi passargli il linguaggio nella chiamata e poi loro provvedono
  a farsi il 'do' opportuno
3) invece della system, usi un'altra 'do'
In ogni caso, l'idea del file temporaneo mi sembra quasi certamente da 
scartare. Troppi problemi in caso di esecuzione contemporanea di due o piu'
copie del programma.
