Perl Impression de mise en mémoire tampon flush
J'ai le texte suivant du code Perl:
STDOUT->autoflush(1);
foreach(...)
{
...
foreach(...)
{
print("Processing $folder");
$|=1;
process($folder);
}
...
}
mais l'instruction d'impression ne fonctionne que dans la première itération de la boucle et de ne pas imprimer quoi que ce soit après. Aucune idée pourquoi?
EDIT: j'ai trouvé la raison et de l'avoir ajouté dans la réponse aussi.
La solution était:
J'ai ajouté la ligne suivante à l'intérieur de la
boucle et il a travaillé:sélectionnez sortie standard (STDOUT);
Je pense que le code dans le processus de() la fonction
doit avoir été la modification de la valeur par défaut
tampon de sortie. Il s'agit d'un code écrit
par quelqu'un d'autre!Je ne suis pas sûr si c'est un problème
avec Perl qui permet ce ou de l'
développeur qui n'a pas le modifier
la valeur par défaut.Le code final ressemblait à ceci:
foreach(...) { ... foreach(...) { select STDOUT; print("Processing $folder"); $|=1; process($folder); } ... }
Merci à tous...
ouais il y a plus d'une itération. J'ai essayé d'ajouter avertir déclaration et il commençait à être imprimé plusieurs fois.
trouvé le problème. Veuillez voir ma réponse ci-dessous.
OriginalL'auteur Manoj | 2009-08-03
Vous devez vous connecter pour publier un commentaire.
Bon travail de détective dans la traque de ce problème!
Je voudrais vous proposer une solution alternative.
Plutôt que d'avoir
select()
guerres avec l'auteur deprocess()
, vous pouvez utiliser le IO::Handle interface de sortie standard:OriginalL'auteur daotoad
J'ai ajouté la ligne suivante à l'intérieur de la boucle, et il a travaillé:
Je pense que le code dans le processus de() la fonction doit avoir été la modification de la valeur par défaut du tampon de sortie. Il s'agit d'un code écrit par quelqu'un d'autre!
Je ne suis pas sûr si c'est un problème avec Perl qui permet ce ou le développeur qui n'a pas revenir à la valeur par défaut.
Le code final ressemblait à ceci:
Merci à tous...
OriginalL'auteur Manoj
Mon code ressemble à ceci:
OriginalL'auteur András Szabácsik