Перенаправление 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: , ,

WebKitFormBoundary file.upload ISPmanager Opera

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

При использовании Opera и файловым менеджером панели ISPmanager при загрузке *.html файлов возникает ошибка :

В код файла добавляется следующее :

——WebKitFormBoundary
Content-Disposition: form-data; name="func"

file.upload

Данная ошибка воспроизводится только под браузером Opera.

Как вариант, до фикса бага нужно использовать другой браузер.

Tags:

использование reCAPTCHA в perl CGI

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

Модуль cpan — http://search.cpan.org/dist/Captcha-reCAPTCHA/lib/Captcha/reCAPTCHA.pm

Регистрируем домен в https://www.google.com/recaptcha и получаем PRIVATE_KEY и PUBLIC_KEY . Далее устанавливаем модуль Captcha::reCAPTCHA . По образцу со страницы модуля пишем простой скрипт :


#!/usr/bin/perl

use CGI;
use Captcha::reCAPTCHA;
$cgi = CGI->new();
my $c = Captcha::reCAPTCHA->new;
print "Content-type:text/html\r\n\r\n";
print <

HTML
my $result = $c->check_answer(
"PRVATE_KEY", $ENV{'REMOTE_ADDR'},
$cgi->param(recaptcha_challenge_field),
$cgi->param(recaptcha_response_field)
);
if ( $result->{is_valid} ) {
print "Yes!";
}
else {
$error = $result->{error};
}
print $c->get_html( 'PUBLIC_KEY', $error );
#

print <

HTML


Как видите, мы описали CGI, и поместили в разрезе функцию ввода и проверки капчи :

my $result = $c->check_answer(
"PRVATE_KEY", $ENV{'REMOTE_ADDR'},
$cgi->param(recaptcha_challenge_field),
$cgi->param(recaptcha_response_field)

и функцию вывода ответа :

print $c->get_html( 'PUBLIC_KEY', $error );

Сама переменная правильности ответа ( Да/Нет ) находится тут — $result->{is_valid}

Tags: , , ,

insert кириллических символов в таблицу MySQL

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

при выполнении запроса :

insert into test.test ('col1') VALUES ('МОЙИНСЕРТ');

в БД добавляется запись, но в битой кодировке. Исправить это можно, добавив перед кириллической ячейкой для инсерта N. Верный запрос :

insert into test.test ('col1') VALUES (N'МОЙИНСЕРТ');

Tags: ,