Результаты поиска
Как сделать гиперссылку на конкретный слайд файла .ppt?
Я хочу создать ссылку на конкретный слайд в файле online PowerPoint, (например, http://www.example.com/hello.ppt), но я хочу, чтобы, когда люди нажимают на мою ссылку, она сразу переходит к N-му слайду.
Разве это возможно?
Доступен ли журнал Perl онлайн?
Кто-нибудь знает, где можно найти онлайн-копии старых статей журнала The Perl ?
Я знаю, что теперь они принадлежат доктору Доббу, просто главная страница для него говорит, что они являются частью любого раздела, тема которого тоже актуальна, а не индексируются вместе. Тем не менее, я никогда не мог найти ни одного из них в интернете на этом сайте.
Я знаю, что у Марка Джейсона Доминуса есть несколько его статей на своем сайте , кто-нибудь знает о других хороших местах? Или даже какие поисковые термины использовать в доктор Доббс это?
Доступен ли журнал Perl онлайн?
Кто-нибудь знает, где можно найти онлайн-копии старых статей журнала The Perl ?
Я знаю, что теперь они принадлежат доктору Доббу, просто главная страница для него говорит, что они являются частью любого раздела, тема которого тоже актуальна, а не индексируются вместе. Тем не менее, я никогда не мог найти ни одного из них в интернете на этом сайте.
Я знаю, что у Марка Джейсона Доминуса есть несколько его статей на своем сайте , кто-нибудь знает о других хороших местах? Или даже какие поисковые термины использовать в доктор Доббс это?
Как я могу определить тип благословенной ссылки в Perl?
В Perl объект - это просто ссылка на любой из основных типов данных Perl, который был благословлен в определенный класс. Когда вы используете функцию ref() для необработанной ссылки, вам говорят, на какой тип данных указывает ссылка. Однако, когда вы вызываете ref() по благословенной ссылке, вам возвращается имя пакета, в который была благословлена ссылка.
Я хочу знать фактический базовый тип благословенной ссылки. Как я могу это определить?
Как я могу определить тип благословенной ссылки в Perl?
В Perl объект - это просто ссылка на любой из основных типов данных Perl, который был благословлен в определенный класс. Когда вы используете функцию ref() для необработанной ссылки, вам говорят, на какой тип данных указывает ссылка. Однако, когда вы вызываете ref() по благословенной ссылке, вам возвращается имя пакета, в который была благословлена ссылка.
Я хочу знать фактический базовый тип благословенной ссылки. Как я могу это определить?
Почему моя карта Perl ничего не возвращает?
Когда я выполняю следующий оператор:
@filtered = map {s/ //g} @outdata;
он возвращает пустой список вместо отфильтрованного списка, который я ожидал. То, что я пытаюсь сделать, это удалить каждое вхождение из массива строк (который является файлом XML).
Очевидно, я чего-то не понимаю. Может ли кто-нибудь сказать мне, как правильно это сделать, и почему это не работает для меня, как есть?
Как узнать, имеет ли переменная числовое значение в Perl?
Есть ли простой способ в Perl, который позволит мне определить, является ли данная переменная числовой? Что-то в этом роде ... :
if (is_number($x))
{ ... }
это было бы идеально. Метод, который не будет выдавать предупреждения, когда используется переключатель -w , безусловно, предпочтителен.
Как я могу проверить STDIN без блокировки в Perl?
Я пишу свое первое приложение Perl - AOL Instant Messenger bot, который разговаривает с Arduino microcontroller, который, в свою очередь, управляет сервомотором, который нажимает кнопку питания на сервере нашего sysadmin, который случайным образом зависает каждые 28 часов или около того.
Я сделал все самое сложное, я просто пытаюсь добавить последний бит кода, чтобы разорвать основной цикл и выйти из AIM, когда пользователь наберет 'quit'.
Проблема в том, что если я попытаюсь прочитать из STDIN в главном цикле программы, он блокирует процесс до тех пор, пока не будет введен ввод, по сути, делая бота неактивным. Я пробовал тестировать для EOF перед чтением,но никаких костей... EOF просто всегда возвращает false.
Вот ниже приведен пример кода, с которым я работаю:
while(1) {
$oscar->do_one_loop();
# Poll to see if any arduino data is coming in over serial port
my $char = $port->lookfor();
# If we get data from arduino, then print it
if ($char) {
print "" . $char ;
}
# reading STDIN blocks until input is received... AAARG!
my $a = <STDIN>;
print $a;
if($a eq "exit" || $a eq "quit" || $a eq 'c' || $a eq 'q') {last;}
}
print "Signing off... ";
$oscar->signoff();
print "Done\n";
print "Closing serial port... ";
$port->close() || warn "close failed";
print "Done\n";
Как я должен обрабатывать autolinking в wiki контент страницы?
Под автолинковкой я подразумеваю процесс, с помощью которого wiki ссылок, встроенных в содержимое страницы, генерируются либо в гиперссылку на страницу (если она существует), либо в ссылку на создание (если страница не существует).
С помощью парсера, который я использую, это двухэтапный процесс-сначала анализируется содержимое страницы и извлекаются все ссылки на страницы wiki из источника markup. Затем я передаю массив существующих страниц обратно в синтаксический анализатор, прежде чем будет создан окончательный HTML markup.
Каков наилучший способ справиться с этим процессом? Похоже, что мне нужно сохранить кэшированный список каждой отдельной страницы на сайте, а не извлекать индекс заголовков страниц каждый раз. Или лучше проверить каждую ссылку отдельно, чтобы увидеть, существует ли она? Это может привести к большому количеству запросов к базе данных, если список не был кэширован. Будет ли это по-прежнему жизнеспособно для более крупного сайта wiki с тысячами страниц?
Как может Perlsystem() напечатать команду, которую он выполняет?
В Perl вы можете выполнять системные команды, используя system() или ` (backticks). Вы даже можете записать выходные данные команды в переменную. Однако это скрывает выполнение программы в фоновом режиме, так что человек, выполняющий ваш сценарий, не может его видеть.
Обычно это полезно, но иногда я хочу посмотреть, что происходит за кулисами. Как сделать так, чтобы выполняемые команды печатались на terminal, а выходные данные этих программ-на terminal? Это будет .bat эквивалент "@echo on".
Как я могу прочитать содержимое каталога в Perl?
Как заставить Perl считывать содержимое данного каталога в массив?
Backticks может это сделать, но есть ли какой-то метод, использующий 'scandir' или аналогичный термин?
Как выполнить подстановку Perl в строке, сохраняя при этом оригинал?
В Perl, какой хороший способ выполнить замену строки с помощью регулярного выражения и сохранить значение в другой переменной, не изменяя оригинал?
Обычно я просто копирую строку в новую переменную, а затем привязываю ее к s/// regex, который делает замену на новую строку, но мне было интересно, есть ли лучший способ сделать это?
$newstring = $oldstring;
$newstring =~ s/foo/bar/g;
Почему я не могу получить страницы Википедии с LWP::Simple?
Я пытаюсь извлечь страницы Википедии с помощью LWP::Simple, но они не возвращаются. Настоящий кодекс:
#!/usr/bin/perl
use strict;
use LWP::Simple;
print get("http://en.wikipedia.org/wiki/Stack_overflow");
ничего не печатает. Но если я использую какую-то другую веб-страницу, скажем http://www.google.com , она отлично работает.
Есть ли какое-то другое имя, которое я должен использовать для ссылки на страницы Википедии?
Что здесь может происходить?
Почему я не могу подключиться к моему серверу CAS с Perl AuthCAS?
Я пытаюсь использовать существующий сервер CAS для аутентификации входа в веб-скрипт Perl CGI и использую модуль AuthCAS Perl (v 1.3.1). Я могу подключиться к серверу CAS, чтобы получить билет службы, но когда я пытаюсь подключиться, чтобы проверить билет, мой скрипт возвращается со следующей ошибкой из модуля IO::Socket::SSL:
500 Can't connect to [CAS Server]:443 (Bad hostname '[CAS Server]')
([CAS Server] substituted for real server name)
Symptoms/Tests:
- Если я наберу сгенерированный URL для аутентификации в строке местоположения веб-браузера, он вернется просто отлично с ожидаемым фрагментом XML. Так что это не плохое имя хоста.
- Если я создаю сценарий без использования модуля AuthCAS, но используя модуль IO::Socket::SSL непосредственно для запроса сервера CAS для проверки созданного билета службы, сценарий Perl будет работать нормально из командной строки, но не в браузере.
- Если я добавлю модуль AuthCAS в скрипт в пункте 2, скрипт больше не будет работать в командной строке и по-прежнему не будет работать в браузере.
Вот голые кости скрипт, который производит ошибку:
#!/usr/bin/perl
use strict;
use warnings;
use CGI;
use AuthCAS;
use CGI::Carp qw( fatalsToBrowser );
my $id = $ENV{QUERY_STRING};
my $q = new CGI;
my $target = "http://localhost/cgi-bin/testCAS.cgi";
my $cas = new AuthCAS(casUrl => 'https://cas_server/cas');
if ($id eq ""){
my $login_url = $cas->getServerLoginURL($target);
printf "Location: $login_url\n\n";
exit 0;
} else {
print $q->header();
print "CAS TEST<br>\n";
## When coming back from the CAS server a ticket is provided in the QUERY_STRING
print "QUERY_STRING = " . $id . "</br>\n";
## $ST should contain the received Service Ticket
my $ST = $q->param('ticket');
my $user = $cas->validateST($target, $ST); #### This is what fails
printf "Error: %s\n", &AuthCAS::get_errors() unless (defined $user);
}
Есть идеи, где может быть конфликт?
Сообщение об ошибке поступает от линии непосредственно над Cebjyre фрагмент процитировал именно
$ssl_socket = new IO::Socket::SSL(%ssl_options);
а именно: создание сокета. Все входные параметры верны. Я отредактировал модуль, чтобы ввести отладочные операторы и распечатать все параметры непосредственно перед этим вызовом, и все они в порядке. Похоже, мне придется глубже погрузиться в модуль IO::Socket::SSL.
Каков самый быстрый способ определить полный URL из относительного URL (учитывая базу URL)
В настоящее время я использую модуль URI::URL для создания полного URL из относительного URL; однако он работает не так быстро, как хотелось бы. Кто-нибудь знает другой способ сделать это, который может быть быстрее?
Лучший способ извлечь данные из базы данных FileMaker Pro в скрипте?
Моя работа была бы проще или, по крайней мере, менее утомительной, если бы я мог придумать автоматизированный способ (предпочтительно в сценарии Python) извлечения полезной информации из базы данных FileMaker Pro. Я работаю на машине Linux, и база данных FileMaker находится на том же самом LAN, работающем на машине OS X. Я могу войти в веб-интерфейс с моей машины.
Я очень хорошо справляюсь с SQL, и если бы кто-нибудь мог указать мне на какой-нибудь плагин FileMaker, который мог бы дать мне доступ к данным SQL в пределах FileMaker, я был бы рад, как панч. Все, что я нашел, идет только в другую сторону: имея FileMaker получить данные из SQL источников. Не полезный.
Это не мой первый выбор,но я бы использовал Perl вместо Python, если бы под рукой было решение Perl-Y.
Примечание: сервисы XML/XSLT (как предлагают некоторые люди) доступны только на FM-сервере, а не на FM Pro. В противном случае, это, вероятно, было бы лучшим решением. ODBC оказывается чрезвычайно трудно даже заставить работать. Существует абсолютно нулевая обратная связь от FM, когда вы настраиваете его, так что вам придется копаться в /var/log/system.log и анализировать неясные сообщения об ошибках.
Вывод : я получил его работу, запустив сценарий python локально на машине, которая запрашивает базу данных FM через соединения ODBC. Скрипт на самом деле является TCPServer, который принимает сокетные соединения от других систем на LAN, выполняет запросы и возвращает данные через сокетное соединение. Мне пришлось сделать это, чтобы обойти тот факт, что FM Pro принимает только ODBC соединений локально (FM сервер требуется для внешних подключений).
Regex, чтобы соответствовать всем тегам HTML, кроме
и
Мне нужно сопоставить и удалить все теги, используя регулярное выражение в Perl. У меня есть следующее:
<\\??(?!p).+?>
Но это все равно совпадает с закрывающим тегом </p> . Есть ли какие-либо подсказки о том, как соответствовать закрывающему тегу?
Обратите внимание, что это выполняется на xhtml.
Как оптимизировать добавление perl модулей?
Сейчас имеется список из нескольких десятков perl модулей, которые запускаются при добавление нового сервера в облако.
Инсталляция этих модулей занимает продолжительное время — несколько часов.
1. Подскажите, есть ли какие-либо пути ускорения добавления новых модулей?
2. Как я понял, пред-скомпилированных модулей нет, как это есть в PHP. Так ли это?
3. Насколько корректно использование следующей команды для автоматизации инсталляции echo «y» | cpan -i Net::SMTP?
Спасибо.
Посоветуйте Web Framework на Perl
Хочу просто написать дипломную на Perl и хотелось бы узнать какие фреймворки есть и какую посоветуете использовать?
Вопрос архитектуры приложения, связка C++ (back-end) и Perl (web-front-end)
Возникла идея написать игру. Из-за своей специфики, а именно необходимости использовать её не только в качестве онлайн-игры, но и в качестве десктоп-игры, было решено основной движок писать на C++.
Веб-фронтэнд будет, скорее всего, написан на Perl. Вообще говоря, я так понимаю, к сути вопроса, какой язык веб-программирования будет использован, не относится.
Вопрос, собственно следующий: как организовать связку движка, написанного на C++ и веб-фронтенда, написанного на Perl?
Сразу скажу, что опыта в этом у меня практически нет и занялся я этим как раз, чтобы его набраться. Ну и just for fun, естественно. Поэтому мне в голову приходит пока системные вызовы, а в движке разбор уже того, что поступает в STDIN и т.п. Но подозреваю, что есть способ получше.
Или нужны какие-то уточнения? Буду благодарен любым советам.
325   2   03:24, 18th August, 2020
Приложение на Perl и конфигурационные файлы?
Есть ли платформонезависимый способ развертывания конфигурационных файлов приложения? Хотелось бы, чтобы при выполнении команд:
perl Makefile.PL
make && make test && make install
конфиги устанавливались в /etc/ (обязательно учитывая PREFIX). Поскольку в качестве ОС используется FreeBSD, то в принципе можно воспользоваться make-хуками для этого. Но работать это будет только на FreeBSD.
perl Makefile.PL
make && make test && make install
Приложение на Perl и конфигурационные файлы?
Есть ли платформонезависимый способ развертывания конфигурационных файлов приложения? Хотелось бы, чтобы при выполнении команд:
perl Makefile.PL
make && make test && make install
конфиги устанавливались в /etc/ (обязательно учитывая PREFIX). Поскольку в качестве ОС используется FreeBSD, то в принципе можно воспользоваться make-хуками для этого. Но работать это будет только на FreeBSD.
perl Makefile.PL
make && make test && make install
Модуль прозрачного кеширования mysql запросов в memcached
Существует ли сабж, как модуль perl?
Хотелось бы делать запросы, не думая, что есть фронтенд в виде memcached, и бэкенд в виде mysql.
Учебно-тренировочные задчи для perl?
Хочется «поднять» perl. Читать теорию — это само собой. Но нужно ее применять на практике. Выдумывать задачи что-то не очень получается Где взять водных задач для реализации? Чтоб от простого к сложному.
Shell, замена всех символов строки их кодами?
Привет!
Подскажите, кто знает, каким образом все символы строки заменить их кодами или каким нибудь hash, по средствам команд shell.
Вот пример:
На входе
> hello world
А на выходе, что-то на подобии
> h2dfde3r443332d
Пробовал под windows через perl
$ perl -e 'print crypt(«hello world», «a3»)'
Но выдал:
The crypt() function is unimplemented due to excessive paranoia. at -e line 1.
В линкусе все отрабатывает хорошо.
Вот и ищу, чтоб под windows можно было с минимальными затратами просто поставив msysGit можно было выполнить данную задачу.
upd: пришлось поставить ActivePerl.
заработало.
но решение задачи средствами sh буду ждать.
> hello world
А на выходе, что-то на подобии
> h2dfde3r443332d
В request-tracker-3.8 не получается изменить или создать юзера, очередь и т.п?
Приветствую.
Установил request-tracker-3.8.8 из debian-backports на машину с debian lenny (apache2, mod-fcgid, postgresql-8.4.7). Все установилось благополучно, вход в RT осуществляется, по меню ходить можно. Однако если попытаться завести заявку, нового пользователя или поменять какие-либо настройки пользователя или очереди, вылезают ошибки типа «Невозможно загрузить очередь » или «Couldn't load user '' ». Проблема, судя по всему, не в базе. т.к. проверял с постгресом 9.0, 8.4 и SQLite. Вопрос в том, куда смотреть и что копать. Под катом дебаг лог.
Буду очень благодарен за помощь.
В логе только следующее:
[Thu Feb 17 10:34:44 2011] [debug]: SQL(0.000036s): SELECT main.* FROM CustomFields main WHERE (main.Disabled = '0')
AND (main.LookupType = 'RT::User' OR main.LookupType = NULL) ORDER BY main.Name ASC; (/usr/share/request-tracker3.
8/lib/RT/Interface/Web.pm:780)
[Thu Feb 17 10:34:46 2011] [error]: WebRT: Couldn't load user '' (/usr/share/request-tracker3.8/html/Elements/Error:8
2)
Trace begun at /usr/share/request-tracker3.8/lib/RT.pm line 302
Log::Dispatch::__ANON__('Log::Dispatch=HASH(0x5108290)', 'WebRT: Couldn\'t load user \'\'') called at /usr/share/requ
est-tracker3.8/html/Elements/Error line 82
HTML::Mason::Commands::__ANON__('Why', 'Couldn\'t load user \'\'') called at /usr/share/perl5/HTML/Mason/Component.pm
line 135
HTML::Mason::Component::run('HTML::Mason::Component::FileBased=HASH(0x5fda380)', 'Why', 'Couldn\'t load user \'\'') c
alled at /usr/share/perl5/HTML/Mason/Request.pm line 1278
eval {...} at /usr/share/perl5/HTML/Mason/Request.pm line 1268
HTML::Mason::Request::comp(undef, undef, 'Why', 'Couldn\'t load user \'\'') called at /usr/share/request-tracker3.8/l
ib/RT/Interface/Web.pm line 863
HTML::Mason::Commands::Abort('Couldn\'t load user \'\'') called at /usr/share/request-tracker3.8/html/Admin/Users/Mod
ify.html line 298
HTML::Mason::Commands::__ANON__ at /usr/share/perl5/HTML/Mason/Component.pm line 135
HTML::Mason::Component::run('HTML::Mason::Component::FileBased=HASH(0x7fc2baf15988)') called at /usr/share/perl5/HTML
/Mason/Request.pm line 1278
eval {...} at /usr/share/perl5/HTML/Mason/Request.pm line 1268
HTML::Mason::Request::comp(undef, undef, undef) called at /usr/share/perl5/HTML/Mason/Request.pm line 937
HTML::Mason::Request::call_next('RT::Interface::Web::Request=HASH(0x7fc2baf068b0)') called at /usr/share/request-trac
ker3.8/html/Admin/autohandler line 49
HTML::Mason::Commands::__ANON__ at /usr/share/perl5/HTML/Mason/Component.pm line 135
HTML::Mason::Component::run('HTML::Mason::Component::FileBased=HASH(0x5fff878)') called at /usr/share/perl5/HTML/Mason/Request.pm line 1278
eval {...} at /usr/share/perl5/HTML/Mason/Request.pm line 1268
HTML::Mason::Request::comp(undef, undef, undef) called at /usr/share/request-tracker3.8/lib/RT/Interface/Web.pm line 320
RT::Interface::Web::ShowRequestedPage('HASH(0x5fec570)') called at /usr/share/request-tracker3.8/lib/RT/Interface/Web.pm line 224
RT::Interface::Web::HandleRequest('HASH(0x5fec570)') called at /usr/share/request-tracker3.8/html/autohandler line 53
HTML::Mason::Commands::__ANON__ at /usr/share/perl5/HTML/Mason/Component.pm line 135
HTML::Mason::Component::run('HTML::Mason::Component::FileBased=HASH(0x58ae3b8)') called at /usr/share/perl5/HTML/Mason/Request.pm line 1273
eval {...} at /usr/share/perl5/HTML/Mason/Request.pm line 1268
HTML::Mason::Request::comp(undef, undef, undef) called at /usr/share/perl5/HTML/Mason/Request.pm line 467
eval {...} at /usr/share/perl5/HTML/Mason/Request.pm line 467
eval {...} at /usr/share/perl5/HTML/Mason/Request.pm line 419
HTML::Mason::Request::exec('RT::Interface::Web::Request=HASH(0x7fc2baf068b0)') called at /usr/share/perl5/HTML/Mason/CGIHandler.pm line 193
eval {...} at /usr/share/perl5/HTML/Mason/CGIHandler.pm line 193
HTML::Mason::Request::CGI::exec('RT::Interface::Web::Request=HASH(0x7fc2baf068b0)') called at /usr/share/perl5/HTML/Mason/Interp.pm line 342
HTML::Mason::Interp::exec(undef, undef) called at /usr/share/perl5/HTML/Mason/CGIHandler.pm line 124
eval {...} at /usr/share/perl5/HTML/Mason/CGIHandler.pm line 124
HTML::Mason::CGIHandler::_handler('HTML::Mason::CGIHandler=HASH(0x5aa5688)', 'HASH(0x6037810)') called at /usr/share/perl5/HTML/Mason/CGIHandler.pm line 73
HTML::Mason::CGIHandler::handle_cgi_object('HTML::Mason::CGIHandler=HASH(0x5aa5688)', 'CGI::Fast=HASH(0x60319b0)') called at /usr/share/request-tracker3.8/libexec/mason_handler.fcgi line 80
eval {...} at /usr/share/request-tracker3.8/libexec/mason_handler.fcgi line 80
Вопрос к PERL программистам
Есть perl демон:
#!/usr/bin/perl -w
###Подключение всех необходимых модулей###
use strict;
use POSIX;
use POSIX ":sys_wait_h";
use IO::Socket;
use IO::Handle;
###Создаем процесс-демон###
my $pid= fork();
exit() if $pid;
die "Couldn't fork: $! " unless defined($pid);
###Создаем связь с новым терминалом###
POSIX::setsid() or die "Can't start a new session $!";
###Переменная - бесконечное время жизни сервера###
my $time_to_die =0;
###Переменная - интернет-сокет или сервер###
my $server;
###Функция обработчик сигналов INT и TERM###
###Она срабатывает перед этими сигналами###
sub signal_handler{
$time_to_die = 1;
close($server);
}
$SIG{INT}= $SIG{TERM} = $SIG{HUP} = \&signal_handler;
###Функция обработчик сигнала CHLD - для уборки процессов зомби ###
sub REAPER {
while ((my $waitedpid = waitpid(-1,WNOHANG)) > 0) { }
$SIG{CHLD} = \&REAPER
}
###Заполняем массив разрешенных команд при старте сервера###
###Создаем интернет сокет на порту 17403###
my $server_port=17403;
$server= new IO::Socket::INET(LocalPort => $server_port,
TYPE => SOCK_STREAM,
Reuse => 1,
Listen => 10)
or die "Couldn't be a tcp server on port $server_port: $@\n";
###Сервер работает до бесконечности пока его не вырубит Term ###
until($time_to_die){
my $client;
my $req;
###Обрабатываем входящие подключения
while($client = $server->accept()){
###Включаем обработку зомби###
$SIG{CHLD} = \&REAPER
###Тот который постучался, отделяем в отдельный процесс###
defined(my $child_pid=fork()) or die "Can't fork new child $!";
###Родительский процесс идет в конец и ждет следующего подключения###
next if $child_pid;
###Дочернему процессу копия сокета не нужна, её закрываем###
if($child_pid == 0) {
close($server);
}
###Очистка буфера###
$client->autoflush(1);
my $response = <$client>;
my @get_req = split(' ', $response);
print $client $get_req[1];
exit;
}
continue {
close($client);
}
}
* This source code was highlighted with Source Code Highlighter.
Данный демон запускается и слушает указанный порт, и при запросе к нему скажем через браузер.
sitename.ru:17403/?param=1¶m2=2
он создаст процесс свою копию, обработает запрос этим процессом и отдаст клиенту "/?param=1¶m2=2". После этого закроет этот процесс.
Вопрос в том, всё ли правильно написано и всё ли правильно я понимаю и главное будет ли это работать так как я описал?
#!/usr/bin/perl -w
###Подключение всех необходимых модулей###
use strict;
use POSIX;
use POSIX ":sys_wait_h";
use IO::Socket;
use IO::Handle;
###Создаем процесс-демон###
my $pid= fork();
exit() if $pid;
die "Couldn't fork: $! " unless defined($pid);
###Создаем связь с новым терминалом###
POSIX::setsid() or die "Can't start a new session $!";
###Переменная - бесконечное время жизни сервера###
my $time_to_die =0;
###Переменная - интернет-сокет или сервер###
my $server;
###Функция обработчик сигналов INT и TERM###
###Она срабатывает перед этими сигналами###
sub signal_handler{
$time_to_die = 1;
close($server);
}
$SIG{INT}= $SIG{TERM} = $SIG{HUP} = \&signal_handler;
###Функция обработчик сигнала CHLD - для уборки процессов зомби ###
sub REAPER {
while ((my $waitedpid = waitpid(-1,WNOHANG)) > 0) { }
$SIG{CHLD} = \&REAPER
}
###Заполняем массив разрешенных команд при старте сервера###
###Создаем интернет сокет на порту 17403###
my $server_port=17403;
$server= new IO::Socket::INET(LocalPort => $server_port,
TYPE => SOCK_STREAM,
Reuse => 1,
Listen => 10)
or die "Couldn't be a tcp server on port $server_port: $@\n";
###Сервер работает до бесконечности пока его не вырубит Term ###
until($time_to_die){
my $client;
my $req;
###Обрабатываем входящие подключения
while($client = $server->accept()){
###Включаем обработку зомби###
$SIG{CHLD} = \&REAPER
###Тот который постучался, отделяем в отдельный процесс###
defined(my $child_pid=fork()) or die "Can't fork new child $!";
###Родительский процесс идет в конец и ждет следующего подключения###
next if $child_pid;
###Дочернему процессу копия сокета не нужна, её закрываем###
if($child_pid == 0) {
close($server);
}
###Очистка буфера###
$client->autoflush(1);
my $response = <$client>;
my @get_req = split(' ', $response);
print $client $get_req[1];
exit;
}
continue {
close($client);
}
}
* This source code was highlighted with Source Code Highlighter.