Newsgroup: it.comp.lang.perl
Titolo: Mi serve una manina!

Ciao a tutti!
Sono nuovo qui, e vedrò di non essere troppo di disturbo!
Allora, il problema è questo: ho una parte di script che chiede
all'utente
di scegliere 1 o 2 (ovviamente ad ognuno di questo corrisponde una
diversa
cosa, non è il classico codice che stampa i numeri!!), scritto così:
print "Is this file in /usr/src directory?
Answer \"1\" for yes or \"2\" for no\n";
$dir=<STDIN>;
if ($dir == '1') {
        print "\n";
} elsif ($dir == '2') {
        system("mv $patch_file /usr/src");
        print "File has been moved to /usr/src\n";
} else {
        chop $dir;
        print "$dir: unassigned command\n";
}
Il fatto è che, se l'utente sbaglia a selezionare 1 o 2, lo
script se ne esce bello bello e chi s'è visto s'è visto! Vorrei
invece che, se la selezione è diversa da 1 o 2, ripeta la domanda
e riparta chiedendo di scegliere: insomma, una specie di loop che
si interrompe solo quando la selezione è 1 o 2. Ne ho pensate
tante, ma con nessuna ho avuto successo ...
Idee??
TIA
Edo
-- 
	     Edoardo Valsesia 
	Home: 
www.edo_v.freeweb.org
 
edvalse(at)
tin.it
 | edo(at)
penguinpowered.com
 

 ho pensate tante, ma con nessuna ho avuto successo ...
<CODE>
	print "Choose a directory (1 or 2)\n";
	chomp ($choice=<STDIR>);
	while (1) {
		if ($choice eq '1') {
			# stuffs
			last BRAVO;
		}
		elsif ($choice eq '2') {
			#stuffs
			last BRAVO;
		}
		else {
			print "Hey, do you understand what I ".
				"have said? (1 or 2)\n";
			chomp ($choice=<STDIN>);
		}
	}
 
	BRAVO: print "Ok!\n";
</CODE>
	Alla prossima,
		Marco

 cerchero' un'altra donna dentro ai sogni di Tarzan...

 
Me pijja, me pijja! Solo che (e scusa l'incompetenza!) dove cavolo lo
infilo il ciclo di 'if'? Cioč, per ogni selezione che sia 1 o 2 deve
succedere qualcosa; 'n'do lo metto?
Edo che inizia un po' a provar vergogna ....


succedere qualcosa; 'n'do lo metto?
Dopo.
D'altra parte la tua domanda era 'come ottengo una risposta tra queste
due?', e non 'come me la gestisco poi?' ;-)))
Puoi, come giustamente mi suggeriva oha in irc, farti una sub che
prenda la risposta. Poi usi la risposta come vuoi. Es.:
$risp=dimmelo('Scegli una directory (1 o 2):','1','2');
if ($risp eq '1') { ... }
else { ... }
...
sub dimmelo {
  my ($dom,$risp,$scelta);
  $dom = shift;
  $risp = join(' ',@_);
  do {
    print "$dom\n";
    chomp ($scelta=<STDIN>);
    } until " $risp " =~ / $scelta /;
  return $scelta }


>succedere qualcosa; 'n'do lo metto?
Dimenticavo...
ci sono un paio di erroretti nella tua domanda; quello veniale e' che
if non e' un ciclo ma un blocco, quello grave e' che "pijja" se deve
da scrive "pijia", occhei? ;-))
Cfr.: "Trippe, trippe! Pijia, pijia!"
(da "Ancomarzio", di Andrea Pazienza)


 (da "Ancomarzio", di Andrea Pazienza)> 
E' un libro? Lo compro .... anzi ... 'o pijio!
Lasciando da parte queste perle e tornando al perl (che giocoliere del
verbo!), ho provato a fare da solo la faccenda dell'if, e sembra
fungere. Ho fatto una cosa del genere:
Ho aperto il do {, ed al suo interno ci ho incastrato il blocco
if/elsif/else, ho chiuso il do e dopo la } ho messo l'until (se non hai
capito dimmelo che ti incollo il codice!).
Funzionare, funziona: se non si preme 1 o 2 torna a fare la domanda,
invece con la pressione di 1 o 2 va avanti per la sua strada; testandolo
con l'opzione -w non si lamenta di niente, il piccì non è ancora
esploso, l'unico scoglio sei tu!! Passa il tuo controllo qualità o devo
ancora metterci le mani? (anche se è già in rete, a disposizione di
tutti!). Ah, visto che sono nuovo del NG e non vi conosco, la riga sopra
va letta "in tono scherzoso", non come una sfida nè come una presa per
il culo!!
In altri NG mi sono capitati "spiacevoli inconvenienti", non vorrei che si
ripetesse!
Ciao
Edo


capito dimmelo che ti incollo il codice!).
Perche' tanto odio?
do { ... } until ... ;
#qui sei certo di avere $scelta
if () { ... } else { ... }
Non ha senso ficcare il blocco if nel ciclo until: anche se (in questo
specifico caso) l'effetto e' lo stesso (dopo l'if esce comunque), e'
algoritmicamente alquanto sgradevole.


Pape' Satan, pape' Satan aleppe, comincio' Marco con voce chioccia:
MB> ci sono un paio di erroretti nella tua domanda; quello veniale e' che
MB> if non e' un ciclo ma un blocco, quello grave e' che "pijja" se deve
MB> da scrive "pijia", occhei? ;-))
MB> Cfr.: "Trippe, trippe! Pijia, pijia!"
MB> (da "Ancomarzio", di Andrea Pazienza)
scusate l'OT, ma non posso rimanere impassibile di fronte ad una
simile bestialita' :-))
[...]
[detto dal padre al figlio che assiste ad una impiccagione]
"Pijja", me disse, "e aricordete bbene 
Che sta fine medema ce sta scritta
Pe mill'antri che sso' mejjo de tene".
G. G. Belli, che mi pare piu' autorevole di Andrea Pazienza.
-- 
ciao,
Claudio