У меня есть проблема, я надеюсь кто-то может помочь с ...Perl - Вырвавшись из системы/команды на обратные кавычках нажатия клавиши, если она занимает много времени
У меня есть цикл по каждому элементу, который выполняет обратные кавычки команду на каждая итерация, например, сглаживание папки в каталоге для строки (как показано ниже, значительно упрощается для объяснения моего вопроса).
my @folderList = ("/home/bigfolder", "/home/hugefolder", "/home/massivefolder");
my @wordList = ("hello", "goodbye", "dog", "cat");
foreach my $folder (@folderList) {
foreach my $word (@wordList) {
print "Searching for this $word in this $folder\n";
my @output = `grep -R $word $folder`; #this could take hours so the user needs the option to skip/cancel this iteration and go the next one
print "@output\n";
}
}
Проблема, которую я имею:
Если папка кавычка Grep команда в настоящее время работают с особенно большой или массивом слов, чтобы проверить против особенно велико, то команда обратных кавычек может занять часов для завершения (что хорошо).
Но я хочу, чтобы иметь возможность сделать это, чтобы вырваться из внутреннего цикла (т.е. когда слово скопилось в папке) и перейти к следующей итерации, если это занимает много времени, когда пользователь нажимает клавишу на клавиатуре или, например, вводит слово «следующий» или «выход».
Я знаю, что если я не был с помощью кавычки я мог легко выйти из нормального цикла, используя что-то вроде следующего (но логика это, очевидно, не работает, когда обратные кавычки/системный вызов участвует):
use strict;
use warnings;
use Term::ReadKey;
my $n = 0;
while() {
print '.';
last if ReadKey(-1);
$n++;
}
print $n;
Там может быть простым решение, которое я с видом, но я никогда не имел необходимости сделать это раньше, поэтому ваша помощь очень ценится, благодаря