Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RFpro.ru: Программирование на языке Perl


Хостинг портала RFpro.ru:
Московский хостер
Профессиональный платный хостинг на базе Windows 2008

РАССЫЛКИ ПОРТАЛА RFPRO.RU

Чемпионы рейтинга экспертов в этой рассылке

_Ayl_
Статус: Студент
Рейтинг: 1544
∙ повысить рейтинг »
Хватов Сергей
Статус: Практикант
Рейтинг: 155
∙ повысить рейтинг »
Hubbitus
Статус: 10-й класс
Рейтинг: 89
∙ повысить рейтинг »

/ КОМПЬЮТЕРЫ И ПО / Программирование / Perl (Перл)

Номер выпуска:118
Дата выхода:31.01.2010, 16:30
Администратор рассылки:Калашников О.А., Руководитель
Подписчиков / экспертов:252 / 33
Вопросов / ответов:3 / 6

Вопрос № 89484: Здравствуйте доргие эксперты! Я не так давно изучаю Perl, доконца еще не разобрался в его возможностях. Помогите пожалуйста решить такуж задачу: Требуется запустить параллельный процесс, подождав несколько секунд убить его (в принципе `killal...


Вопрос № 44499: Здравствуйте! Как на PErl использую только регулярные выражения сделать сдевующее: введенной строке утроить все числа. например: "qwerty5rtyy9tyty", результата: "qwerty15rtyy27tyty". Зарание большое спасибо!...
Вопрос № 71939: Никак не пойму, как обрабатывать символы в строке. Предположим есть: $str = "hello, perl"; Как в цикле пробежатся по всем символам и сделать с ними что-нибудь ? Я естествено попробовал тыкнуть пальцем в небо и написал так: $...

Вопрос № 89484:

Здравствуйте доргие эксперты!
Я не так давно изучаю Perl, доконца еще не разобрался в его возможностях. Помогите пожалуйста решить такуж задачу:
Требуется запустить параллельный процесс, подождав несколько секунд убить его (в принципе `killall` подойдет, хотя может и кроссплатформенная реализация тоже будет интересна), получить от него вывод, желательно напрямую в переменную.
Заранее благодарю всех ответивших!!!!

Отправлен: 31.05.2007, 19:36
Вопрос задал: Казаков М.А. / gnom, Студент
Всего ответов: 2
Страница вопроса »


Отвечает dianacode, Практикант :
Доброе время суток, Казаков М.А. / gnom

предлагаю вариант для никсов - fork:
1) родитель создаёт потомка
2) пока потомок выполняется, родитель слушает сигналы от потомка
3) когда потомок завершит выполнение кода он посылает родителю сигнал CHLD
4) родитель, зная, что потомков запущено $countch, и, подсчитав все сигналы от них (в данном случае один) говорит, что все процессы являются defunct, т.е. зомбаками и завершает цикл ожидания while
5) запускается функция на уничтожение зомби

немного теории :: зомби будет висеть до тех пор, пока к нему не обратятся с waitpid или не завершится срипт

со всеми вопросами на форум ^_^

пример кода с комментариями ниже

our $zCounter = 0;

$SIG{CHLD} = sub{ $zCounter++ }; # приём родителя сигналов от потомков и увеличение счётчика принятых сигналов


my $countch = 1;


unless(my $ch = fork){ # старт потомка



print "[c] child is started...\n";



my $i = 0;

for(1..5){

print \'[c] child \', ++$i, "\n";

sleep 1;

}



print "[c] zomb...\n";

exit;

}


while(1){

select(undef, undef, undef, 0.5); # пауза в 500 миллисекунд



if($zCounter >= $countch){ # выходим если все потомки отправили предку сигналы CHLD

print "all child is zomb...\n";

}

}


&killer; # обязательный вызов киллера для ждущих мёртвых процессов

print "all finished...\n";


 


sub killer{

print "garbage collector is active with $zCounter zomb...\n";

$zCounter = 0;

while((my $zomb = waitpid(-1, &WNOHANG)) != -1){

print "zomb $zomb killed with status \'$?\'...\n";

}

}


с уважением, удачи

Приложение:

-----
there is more than one way to do it

Ответ отправил: dianacode, Практикант
Ответ отправлен: 31.05.2007, 21:50

Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 164570 на номер 1151 (Россия) | Еще номера »
  • Отправить WebMoney:
  • Вам помогли? Пожалуйста, поблагодарите эксперта за это!
    Отвечает lupus campestris, Модератор :
    Здравствуйте, Казаков М.А. / gnom!
    Я использую такой вариант (под Windows): дочерний скрипт при запуске записывает свой pid в файл, и при необходимости родительский скрипт считывает его pid и убивает его, после чего удаляет файл с pid\'ом дочернего процесса, уже убитого. Если нет необходимости убивать дочерний процесс, то нужно удалять файл с pid\'ом после выполнения дочернего процесса.
    Используется утилита kill из Support Tools, которые есть на диске с дистрибутивом Windows, но можно и на сайте microsoft.com их скачать.
    Для работы в никсовых системах можно использовать стандартную утилиту kill с параметром -9.
    Что касается вывода, то я в дочернем процессе делаю просто print, а в родительском при запуске направляю вывод дочернего скрипта в файл.
    См. приложение.
    Удачи!

    Приложение:
    Россия, Москва
    Адрес сайта: http://lupus-campestris.blogspot.com/

    -----
    «С кем тяжело молчать, с тем не о чем говорить» (Метерлинк)

    Ответ отправил: lupus campestris, Модератор
    Ответ отправлен: 05.06.2007, 14:01

    Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 165414 на номер 1151 (Россия) | Еще номера »
  • Отправить WebMoney:
  • Вам помогли? Пожалуйста, поблагодарите эксперта за это!


    Вопрос № 44499:

    Здравствуйте! Как на PErl использую только регулярные выражения сделать сдевующее: введенной строке утроить все числа. например:
    "qwerty5rtyy9tyty", результата: "qwerty15rtyy27tyty". Зарание большое спасибо!

    Отправлен: 28.05.2006, 18:18
    Вопрос задал: Сергей Николаевич, Посетитель
    Всего ответов: 1
    Страница вопроса »


    Отвечает -OC-, Специалист :
    Здравствуйте, Сергей Николаевич!
    используйте модификатор /e при замене.
    например так

    Приложение:

    Ответ отправил: -OC-, Специалист
    Ответ отправлен: 28.05.2006, 22:04

    Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 99648 на номер 1151 (Россия) | Еще номера »
  • Отправить WebMoney:
  • Вам помогли? Пожалуйста, поблагодарите эксперта за это!


    Вопрос № 71939:

    Никак не пойму, как обрабатывать символы в строке.
    Предположим есть:
    $str = "hello, perl";
    Как в цикле пробежатся по всем символам и сделать с ними что-нибудь ?
    Я естествено попробовал тыкнуть пальцем в небо и написал так: $str[2] - естественно perl лишь ответил молчанием, не Си все таки.
    Конкретно решаю такую задачу. Есть текст, в нем данные разбиты в группы по 3 байта, первые два байты мне нужно обработать особым образом, 3-ий вообще не нужен.
    Собственно это все мелочи, которые решаются ручками в течении нескольких минут, я не пойму как обращаться к отдельным символам в строке.

    Отправлен: 21.01.2007, 16:08
    Вопрос задал: Torsten
    Всего ответов: 3
    Страница вопроса »


    Отвечает -OC-, Специалист :
    Здравствуйте, Torsten!
    Обрабатывать строку посимвольно можно обработав ее ф-цией split с пустым шаблоном. Т.е. @str = split(//,$str); вернет вам список из отдельных символов строки, а дальше уже обрабатывайте список как вам нужно. Но это не самый хороший вариант решения задачи.
    Если приведете пример текста (хотя бы одну строку) который надо обработать, то тогда можно найти более "красивый" вариант решения.

    Ответ отправил: -OC-, Специалист
    Ответ отправлен: 21.01.2007, 16:35

    Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 138049 на номер 1151 (Россия) | Еще номера »
  • Отправить WebMoney:
  • Вам помогли? Пожалуйста, поблагодарите эксперта за это!
    Отвечает Хватов Сергей, Практикант :
    Здравствуйте, Torsten!

    Помимо уже упомянутого в ответах split можно использовать unpack (и pack для обратной операции) Примерно как в приложении, хотя с описанием формата я могу и ошибиться - нечасто его использую

    Ещё можно использовать s//

    Приложение:

    Ответ отправил: Хватов Сергей, Практикант
    Ответ отправлен: 21.01.2007, 16:50

    Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 138051 на номер 1151 (Россия) | Еще номера »
  • Отправить WebMoney:
  • Вам помогли? Пожалуйста, поблагодарите эксперта за это!
    Отвечает Duke, Студент :
    Здравствуйте, Torsten!
    Одна из самых сильных сторон Perl это регулярные выражения
    Смотри приложение и поставляемую с перлом справку - там всё разжовано

    Приложение:

    Ответ отправил: Duke, Студент
    Ответ отправлен: 22.01.2007, 08:38

    Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 138184 на номер 1151 (Россия) | Еще номера »
  • Отправить WebMoney:
  • Вам помогли? Пожалуйста, поблагодарите эксперта за это!


    Оценить выпуск »
    Нам очень важно Ваше мнение об этом выпуске рассылки!

    подать вопрос экспертам этой рассылки »

    Скажите "спасибо" эксперту, который помог Вам!

    Отправьте СМС-сообщение с тестом #thank НОМЕР_ОТВЕТА
    на короткий номер 1151 (Россия)

    Номер ответа и конкретный текст СМС указан внизу каждого ответа.

    Полный список номеров »

    * Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи. (полный список тарифов)
    ** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
    *** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.


    © 2001-2010, Портал RFpro.ru, Россия
    Авторское право: ООО "Мастер-Эксперт Про"
    Автор: Калашников О.А. | Программирование: Гладенюк А.Г.
    Хостинг: Компания "Московский хостер"
    Версия системы: 2010.6.14 от 23.01.2010

    В избранное