Newsgroup: it.comp.lang.perl
Titolo: L'autoflush di STDOUT non funziona con la console Windows


in quanto ho (correttamente) impostato il flush automatico dello stdout.
E questo č in effetti ciň che avviene quando provo lo script sotto Mac 
Os X (FreeBSD + Perl 5.8.1) e sotto Windows con il perl e la shell di 
Cygwin.
Tuttavia se provo ad usare la console di Windows (2000 o XP) e 
ActiveState Perl, l'autoflush non funziona!!!
Non c'č niente da fare, ho provato ad usare tutti i metodi documentati  
(come ad esempio usare IO::Handle), ma il risultato non cambia: il 
segno di maggiore viene stampato SOLO quando si manda un ritorno a capo 
(\n, non basta il semplice \r), e quindi ci si ri trova 
irrimediabilmente sulla riga successiva ( rovinando l'effetto estetico 
del prompt).
Di piů, non credo che il problema sia da inputare all'eseguibile perl 
di ActiveState, quanto alla console di Windows, in quando provando ad 
eseguire lo script con ActiveState Perl sotto il terminale di Cygwin 
tutto funziona perfettamente, mentre viceversa il perl di Cygwin si 
comporta "male" quando eseguito dalla console Windows.
Ho cercato invano documentazione su questo problema, ma senza successo.
Qualcuno sa dirmi se esiste una soluzione o se dimentico qualcosa?
Ciao,
   Giovanni.     

del prompt).
Non riesco a riprodurre il comportamento. Da me funziona: stampa il
prompt e aspetta l'input. Anzi, per la verità funziona così anche
senza impostare il flush automatico. In effetti, non ricordo di aver
mai incontrato problemi di questo genere (vero che è raro che richieda
un input, ma qualche volta l'ho pur fatto, senza pormi, nella mia
ingenuità, alcun problema di autoflush, e senza incontrarne).
Come esegui il programma? Con che versione di ActivePerl?
Ciao.

 my $userInput = <STDIN>
print ">";   #prompt
$|=1;
 my $userInput = <STDIN>
Ciao, prova come ti ho fatto ora io.
L'autoflush svuota il buffer e cosě li svuoti dopo che hai inserito del
testo.
Ciao

Nel frattempo credo di avere scoperto il colpevole: sto usando come
editor PerEdit di IndigoStar, ed il problema si presenta solamente
quando invoco il programma all'interno di PerlEdit.
Pare che PerlEdit esegua lo script in una normale console di Windows,
ma evidentemente lo fa in un modo che non piace al flush :(
E' giunta l'ora di cambiare editor :))
Qualcuno mi sa consigliare un buon editor *gratuito* per Windows?
(syntax highlighting, run dall'interno dell'editor, syntax check,
magari debugger simbolico etc. etc.)
Grazie comunque per la risposta.
P.S. E' vero, in questo caso l'autoflush e' superfluo, ma mi sono
capitati casi in cui in assenza di newline l'output viene tenuto nel
buffer, dunque io nel dubbio in questi casi uso sempre l'autoflush
(visto che non si possono fare assunzioni su come funziona il buffer).

Ciao. Grazie per la risposta. Nel frattempo (come puoi vedere leggendo
l'altra mia risposta) credo di avere individuato il problema
nell'editor perl che sto utilizzando.
Rispondo comunque alla tua mail: in realta' l'autoflush dovrebbe
impostare un parametro globale del file, per cui da quando viene
eseguito il comando in poi, effettua il flush ad ogni operazione di
output.
Tu invece lo usi un po' come il "flush" del C++, che svuota il buffer
corrente.
Non sono sicuro che, ammesso che l'operazione di print precedente NON
abbia effettuato di per se' il flush, impartire il comando $|=1
produca un flush immediato...
Nel tuo caso, credo che il comando funzioni soprattutto perche', come
e' stato osservato, in realta' il tutto funziona anche *senza* alcun
autoflush.
Ciao,
   Giovanni.


 magari debugger simbolico etc. etc.)
http://enginsite.com/Perl.htm
la versione lite.
Difetti: a volte l'identazione ottenuta col tab non va perfetamente. 
Inoltre non puoi collassare le sub e i blocchi (ehm, insomma quella 
caratteristica per cui hai un + e - davanti all'inizio dei blocchi e 
cliccandoci sopra, il blocco "collass"... vabbè).

(visto che non si possono fare assunzioni su come funziona il buffer).
Certo, mi sembra un atteggiamento rigoroso e responsabile. Riscontravo solo
che io, al contrario, nella mia cialtronaggine, non me ne sono mai
preoccupato e finora piů o meno mi č sempre andata bene. Mi sono imbattuto
invece in comportamenti ancora piů oscuri. Per esempio: in uno stesso
script scrivo un file, lo chiudo e lo riapro per leggerlo e lo trovo vuoto;
il file naturalmente contiene tutto quello che ci ho scritto, per il
sistema e per qualunque programma esterno, ma non per lo script che lo ha
scritto.
Ciao.