@artem78

Как сделать приостановку цикла по клавише в консоли в Perl?

Суть такая. Есть длинный цикл, в котором выполняется некоторое действие.

$x = 1;
while ($x<99999) {
	sleep(3); # Тут что-то делаем ...
	say $x++;
}


Нужно проверять, если пользователь нажал кнопку Pause, то приостановить выполнение и вывести что-то вроде "Press any key to continue". А когда пользователь нажал любую кнопку - продолжать цикл дальше, где остановились.

Видимо нужно в сторону Term::TermKey копать.
  • Вопрос задан
  • 261 просмотр
Пригласить эксперта
Ответы на вопрос 1
@pcdesign
#!usr/bin/perl-w
use strict;
use Term::ReadKey;
use feature 'say';

ReadMode 4;
say "Нажмите любую клавишу для паузы";
say "Нажмите ESC для выхода";
my $key;
$| = 1;
my $x = 1;

sub check_esc {
    my $key = shift; 
    if ( ord($key) == 27 ) { ReadMode 0; exit 0; }
    else                   { return 1; }
}
    
while ( $x < 99999 ) {
    sleep 3;
    $x++;
    say $x; 
    if ( defined( $key = ReadKey(-1) ) ) {
        &check_esc($key);
        say "Ура, Пауза! Нажмите любую клавишу для продолжения ...";
        while ( not defined( $key = ReadKey(-1) ) ) { }
        &check_esc($key);
    }

}
ReadMode 0;

Результат работы:
Нажмите любую клавишу для паузы
Нажмите ESC для выхода
2
3
4
5
Ура, Пауза! Нажмите любую клавишу для продолжения ...
6
7
8
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы