![]() |
Модераторы: korob2001, ginnie |
![]() ![]() ![]() |
|
scion |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 52 Регистрация: 13.5.2009 Репутация: нет Всего: нет |
Прошу помочь(кто чем может) с реализацией:
1. Реализовать набор функций для работы с временными файлами. Первая функция должна создавать временный файл и сохранять его имя в указанной переменной, вторая удалять его. Временные файлы должны удаляться даже если выполнение скрипта завершено принудительно или в результате ошибки. Если файл был создан, но не удален, то в конце работы скрипта должно выводится предупреждение 2. Реализовать функцию, которая проверяет, что все переменные из списка переданных ей установлены. Количество параметров не фиксированное. пример вызова: SOME_VARIABLE=Test CheckVariables SOME_VARIABLE SOME_OTHER_VARIABLE Вывод: SOME_OTHER_VARIABLE not assigned |
|||
|
||||
ginnie |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 6.1.2008 Где: Москва Репутация: 38 Всего: 49 |
scion, рекомендую следующий алгоритм:
1. Подумать и описать словами действия, которые будет выполнять программа 2. Заменить словестные описания блоками кода на Perl 3. Проверить работоспособность кода (на тестовых примерах) 4. Если что-то сделать не получается, задать в форуме конкретный вопрос. -------------------- Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг) |
|||
|
||||
sir_nuf_nuf |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 920 Регистрация: 6.1.2008 Репутация: 14 Всего: 31 |
1) Все уже сделано, до нас:
File::Temp 2) А вы знаете что такое perl ? есть встроенная функция - defined
|
|||
|
||||
ginnie |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 6.1.2008 Где: Москва Репутация: 38 Всего: 49 |
sir_nuf_nuf, по второй задаче, мне кажется, что надо определить "установлены ли указанные переменные окружения".
Это сообщение отредактировал(а) ginnie - 10.6.2009, 16:57 -------------------- Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг) |
|||
|
||||
sir_nuf_nuf |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 920 Регистрация: 6.1.2008 Репутация: 14 Всего: 31 |
||||
|
||||
KSURi |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 887 Регистрация: 8.6.2006 Где: Russia Репутация: 20 Всего: 27 |
![]() The Feynman Problem-Solving Algorithm:
-------------------- Died at Life.pl line 21 |
|||
|
||||
ginnie |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 6.1.2008 Где: Москва Репутация: 38 Всего: 49 |
KSURi, ты пропустил важные детали:
Автор: записывает проблему Посетители форума: старательно обдумывают варианты решения KSURi: пишет решение (раньше всех и получает разные бонусы) ![]() Это сообщение отредактировал(а) ginnie - 10.6.2009, 18:35 -------------------- Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг) |
|||
|
||||
scion |
|
||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 52 Регистрация: 13.5.2009 Репутация: нет Всего: нет |
за темп спс. то что нужно. |
||||
|
|||||
scion |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 52 Регистрация: 13.5.2009 Репутация: нет Всего: нет |
#!/usr/bin/perl
#Create temp file; use File::Temp qw/ :POSIX /; $file = tmpnam(); $fh = tmpfile(); ($fh, $file) = tmpnam(); while (1) {}; END { unlink($file) or die "Couldn't unlink $file : $!"} почему временный файл не хочет удалятся? Нет я понимаю что я не дохожу до последней инструкции, а как мне сделать что бы она в любом случаи исполнялась) когда я прерываю выполнения программы (то есть завершаю её аварийно).... (на цыкле) |
|||
|
||||
KSURi |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 887 Регистрация: 8.6.2006 Где: Russia Репутация: 20 Всего: 27 |
Установите обработчик для SIGINT (^C)
-------------------- Died at Life.pl line 21 |
|||
|
||||
scion |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 52 Регистрация: 13.5.2009 Репутация: нет Всего: нет |
но это не правильно. а если программа умрёт по каким-то другим причинам? |
|||
|
||||
amg |
|
||||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1145 Регистрация: 3.8.2006 Где: Новосибирск Репутация: 38 Всего: 50 |
Да, действительно, а если по компьютеру ударят кувалдой ![]() Впрочем, если хорошенько прицелиться, то файл можно и удалить. |
||||
|
|||||
scion |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 52 Регистрация: 13.5.2009 Репутация: нет Всего: нет |
что-то я окончательно потерялся... ;(
|
|||
|
||||
scion |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 52 Регистрация: 13.5.2009 Репутация: нет Всего: нет |
если так:
$SIG{INT} = \&sig_handler; print "Работаю в поте лица...\n" while (1); sub sig_handler { $SIG{INT} = \&sig_handler; print "Получен сигнал INT по нажатию Ctrl+C\n"; print "Заканчиваю работу!\n"; exit; # завершение выполнения программы } сигнал от ^С обрабатывается, а от kill ID нет... =( пробовал ловить SIG{HUP} |
|||
|
||||
KSURi |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 887 Регистрация: 8.6.2006 Где: Russia Репутация: 20 Всего: 27 |
так kill вроде по умолчанию посылает SIGKILL, не? и кстати, обработчик достаточно поставить один раз
Добавлено через 3 минуты и 53 секунды
Я подумал, что вы сами ее насильно завершаете. Обычно это как раз делают черезе ^C или ^BREAK. Если вам нужно более универсальное решение, то пишите отдельный скрипт, который по каким-то параметрам будет мониторить сабж и делать всякие штуки после его смерти -------------------- Died at Life.pl line 21 |
|||
|
||||
scion |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 52 Регистрация: 13.5.2009 Репутация: нет Всего: нет |
ок. т.е. в perle такого не реализовано? просто я думал что в перле есть уже нечто такое что бы мониторить... "кстати, обработчик достаточно поставить один раз" можно подробнее... что вы имели в виду? хочу ловить $SIG{INT} и $SIG{KILL} нужно писать $SIG{INT} = \&sig_handler; $SIG{KILL} = \&sig_handler2; и соотв. что делают это функции. я правильно понял? можно ли как-нибудь сделать одну универсальную функцию для сигналов INT и KILL? |
|||
|
||||
shamber |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1422 Регистрация: 5.9.2006 Где: Россия Репутация: 17 Всего: 18 |
||||
|
||||
![]() ![]() ![]() |
Правила форума "Perl" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Perl: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |