Newsgroup: it.comp.lang.perl
Titolo: standard input...

Ciao a tutti!
Rieccomi con un nuovo problemino da newbie da sottoporvi.
Avrei bisogno di sapere se esiste una funziona che rileva quando viene
premuto un tasto sulla tastiera. Mi spiego meglio. Se uso il classico:
"$nome = <STDIN>; " tutto quello che il programma sta facendo si interrompe
finchè lo STDIN non riceve dell'input. Io invece vorrei che tutto
continuasse a funzionare finchè non sono io a scrivere qualcosa.
Sapete dirmi come si fa?
Grazie per la pazienza...
Stè

 continuasse a funzionare finchč non sono io a scrivere qualcosa.
Non ho capito! In che senso finché "tu"? "Tu" utente?
Se intendi il controllo dell'input buffering, leggi la faq:
http://www.perldoc.com/perl5.6.1/pod/perlfaq8.html#How-do-I-read-just-one-key-without-waiting-for-a-return-key-
Se invece intedi che il programma "esegue codice" indipendentemente
dall'input, *credo* ti basti usare fork (l'input da tastiera č
cosa rognosa):
perldoc -f fork
perldoc perlfork
e su google puoi trovare tanta roba! :)
-- 
$_=q,6;-16;-1;-8;0;7;-13;-12;-9;-3;13#4A75737420616E6F74686572,,($_,$b)=
split?#?;@b=split?;?;map{$c.=$_,$d.=chr$b[$e++]+ord}split??,pack'H24',$b
;chop$d,print$c.chr(32).$d

  continuasse a funzionare finchè non sono io a scrivere qualcosa.
   Sbaglio, o siamo al solito problema dell'"input controllato"?
   Problema interessante: come si risolve? C'e` un getch(), in Perl?
   (scusate,  sono un  newbie anche  io, lurko  e imparo,  pero` questa  mi
interessa...)
-- 
Power down.

 interessa...)
credo che nelle prime domande di perlfaq8 ci sia molto materiale
da visionare:
perldoc perlfaq8


Faccio un sempio di programma di quello che intendevo:
while (1)   {
        print "Ciao\n";
         if (.......) {   print "Programma interrotto dal carattere......"
                         exit (1);
                      }
        }
Con lo STDIN il ciclo si ferma subito. La funzione che cercavo invece
dovrebbe interrompere il while solo nel momento in cui io digito un
carattere. Comunque grazie al tuo link credo di aver trovato ciň che mi
serviva.
Purtroppo perň (probabilmente sarŕ il solito problema da newbie)  non riesco
a installare il modulo Term::ReadKey che viene indicato nella faq ..
Premetto: uso win 2000 , ho scariato il file TermReadKey-2.19.tar.gz da
http://www.cpan.org/modules/00modlist.long.html
Ho scompattato tutto in una cartella e poi da dos ho dato il comando :
"perl Makefile.PL"
e questo č quello che ottengo:
Checking if your kit is complete...
Looks good
Have C:\Programmi\perl\lib\Config.pm expected C:\PROGRA~
\perl\lib\Config.pm
Your perl and your Config.pm seem to have different ideas about the
architecture
they are running on.
Perl thinks: [lib]
Config says: [MSWin32-x86-multi-thread]
This may or may not cause problems. Please check your installation of perl
if yo
u
have problems building this extension.
Writing Makefile for Term::ReadKey
che devo fare?
Grazie
Stč
Grazie.

 Premetto: uso win 2000 
allora forse hai installato il Perl ActiveState.
In questo caso TermReadKey 2.14 dovrebbe essere già installato
Prova a fare un:
perldoc Term::ReadKey
da console.
Per informazioni su come installare i moduli su win32, fai
perldoc ppm
e poi c'è un mio vecchio post (puoi cercare su:
http://groups.google.com
)


Questo è quello che ho installato.
ActivePerl-5.6.1.628-MSWin32-x86-multi-thread
Non è presente il modulo ReadKey.
Avevo già provato a usare ppm install ma neanche quello funziona.
 Forse lo digito in modo corretto, dovrebbe essere:
 ppm install --location=. ReadKey
 e ho provato anche con
 ppm install --location=c:\temp ReadKey  (che è la cartella in cui ho
scompattato i file)
 ma mi dice:
Installing package 'ReadKey'...
Error installing package 'ReadKey': Could not locate a PPD file for package
Read
Key
Probabilment sbaglio qualcosa.. Cosa????

 Non è presente il modulo ReadKey.
Il nome del modulo è 
Term::ReadKey
per vedere se lo hai installato prova:
perl -e "use Term::Readkey"
da linea di comando.
Se non dà alcun risultato allora il modulo è presente.
Per la documentazione del modulo, fai 
perldoc Term::ReadKey 
da linea di comando


Sě lo so che il comando č quello. Ma nulla. L'ho cercato anche in
..perl\lib\term\. Ho pure aggiunto il file ReadKey.pm manualmente in quella
directory ma non me lo trova...


Da prompt di dos digita
ppm
dopodiché arrivvi ad un prompt interrattivo, tipo:
PPM>
fai:
PPM>query readkey
ti dice qualcosa?
se non ti dice nulla, prova a scrivere (se sei collegato ad internet)
PPM>install Termreadkey
nel caso non fosse presente.
Se fosse presente, per farne un upgrade, fai:
PPM>verify --upgrade Termreadkey
Se non hai il collegamento internet su quella macchina, vai su:
http://www.activestate.com/PPMPackages/zips/6xx-builds-only/
1) scaricati TermReadKey.zip
2) scompattaolo in una directory
3) vai dentro quella directory
4) da prompt di dos scrivi: 
   ppm install --location=. TermReadKey


Dopo il tuo ennesimo suggerimento (che comunque non ha portato a nulla) mi
sono deciso a cancellare e riinstallare tutto. E finalmente sono riuscito ad
aggiungere 'sto benedetto modulo! Forse avrei dovuto farlo prima ma pensavo
di sbagliare qualcos nel'installazione e invece era un problema del mio
perl...
Grazie della pazienza!
Stč