2010-05-24 8 views
2

Ceci est à des fins de débogage. J'ai une boucle for qui génère une sortie vers la CLI de Cygwin bash. Je sais que je peux rediriger les sorties vers des fichiers texte et utiliser Perl ou même simplement un éditeur de texte normal pour inspecter les valeurs imprimées pour une itération particulière, juste sentir un peu douloureux. Ce que je pense maintenant est de placer un sous-programme spécial à l'intérieur de la boucle for, afin qu'il soit "interrompu" au début de chaque itération, et le script Perl ne devrait continuer à fonctionner qu'après que l'utilisateur/programmeur a atteint un touche (la touche Entrée du clavier?)Comment interrompre ou reprendre une boucle Perl en appuyant sur une touche?

De cette manière, je peux directement inspecter les valeurs imprimées à chaque itération.

Existe-t-il un moyen simple de faire cela, sans utiliser de bibliothèques/CPAN supplémentaires?

Répondre

5

Si vous voulez juste faire une pause pour l'entrée d'utilisateur à chaque itération, alors il suffit de faire une lecture de STDIN dans votre boucle:

my $debug = 1; 
while ($looping) { 
    if ($debug) { 
     print "Press enter to continue\n"; 
     $input = <>; 
    } 
} 

Si le drapeau de débogage est défini, le programme se met en pause jusqu'à ce que l'utilisateur appuie entrez, la boucle reprendra. Vous pouvez imprimer vos variables avant la pause. Définissez $debug = 0 pour désactiver la pause.

+0

Merci pour votre réponse, cela fonctionne :) –

+3

sauf si vous appelez le script avec un argument. –

+1

@sid_com: Bon point - j'avais oublié ça. Si vous n'avez pas encore extrait le contenu de '@ ARGV', alors oui, vous avez raison. Normalement, je ne vois pas ce comportement moi-même car analyser les arguments de la ligne de commande est généralement la première chose que je fais dans un code que j'écris. Si la liste '@ ARGV' est vide, l'opérateur du diamant pointe sur STDIN. –

Questions connexes