Перенаправление STDOUT системных команд в консоль при выполнении perl

Posted in Новости on 19 октября, 2012 by admin

Иногда требуется вывести результат команды в консоль, причем результат по сути бесконечный ( например ping ). Стандартный скрипт результата не дал :

#!/usr/bin/perl

use strict;
use warnings;

my $tt = `ping ya.ru`;
print $tt;

потому как по сути все время работы пинга в переменную будет писаться вывод. Для наших целей потребуется модуль IPC::Open2 ( Inter Program Communication ).
Страница модуля — http://search.cpan.org/~jhi/perl-5.8.0/lib/IPC/Open2.pm

Пример работающего скрипта :


#!/usr/bin/perl

use strict;
use warnings;

use IPC::Open2;

my $HANDLE;

my $pid = open(HANDLE, "|ping ya.ru|");

print HANDLE "";
Tags: , ,

Отключение буферизации вывода в perl

Posted in Новости on 19 октября, 2012 by admin

При выполнении скриптов вида :

#!/usr/bin/perl

use strict;
use warnings;

for ( my $i = 0; $i < 10; $i++ ) {
print "Iteration - $i\n";
sleep(1);
}

На выходе мы будем иметь ситуацию, когда print всех операций будет выводиться только после полного выполнения цикла, что является нормальным явлением, так как стандартно буферизация включена. Чтобы ее отключить ( чтобы скрипт при каждой итерации выплевывал в консоль данные ) нам нужно изменить значение специальной переменной $| на отличное от нуля.

Пример готового скрипта :

#!/usr/bin/perl

use strict;
use warnings;
$| = 1;

for ( my $i = 0; $i < 10; $i++ ) {
print "Iteration - $i\n";
sleep(1);
}
Tags: , ,