LINUX.ORG.RU

Perl: таймаут для <STDIN>, еще пару вопросов.


0

0

Пару дней как изучаю Перл, столкнуся вот с чем. Есть значение, вводимое с STDIN. Как задать таймаут ожидания ввода? В shell можно сказать read -t <sec> var, а тут я что-то не могу найти... И последний вопрос: в скрипте должно быть несколько шеловских команд, весьма длинных, поднятие шейперов. Как их лучше интергрировать в перл? делать на каждую строчку exec и так по числу строк? Или можно как-то интергрировать в один блок? Спасибо!

anonymous

> Как задать таймаут ожидания ввода?

http://www.rocketaware.com/perl/perlfunc/alarm.htm

> Как их лучше интергрировать в перл? делать на каждую строчку exec и так по числу строк?

создай строку с помощью here document http://www.shlomifish.org/lecture/Perl/Newbies/lecture4/string-forms/here_doc...

и передай ее в system либо open

dilmah ★★★★★
()
Ответ на: комментарий от dilmah

насчет первого, можно обойтись и без сигналов
#!/usr/bin/perl
use warnings;
use strict;
use IO::Select;

my $select = IO::Select->new(\*STDIN);
print "У вас 5 сек\n";
if ( $select->can_read(5) ) {
    my $str = <STDIN>;
    print "Вы сказали $str\n";
} else {
    print "Ваши 5 секунд иссякли\n"
}

PoMbl4
()
Ответ на: комментарий от PoMbl4

а вообще лучше и без IO::Select;
#!/usr/bin/perl
use warnings;
use strict;

vec(my $rin = '',fileno(STDIN),1) = 1;
if ( select($rin,undef,undef,3) ) {
    my $str = <STDIN>;
    print $str."\n"
} else {
    print "Timeout\n"
}

PoMbl4
()
Ответ на: комментарий от PoMbl4

Большое спасибо, всё заработало!

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.